Skip to main content

Using HTTP API

Introduction

From version 1.2.0 onwards, Cadence has introduced HTTP API support, which allows you to interact with the Cadence server using the HTTP protocol. To put this into perspective, HTTP/JSON communication is a flexible method for server interaction. In the context of Cadence, this implies that a range of RPC methods can be exposed and invoked using the HTTP protocol. This enhancement broadens the scope of interaction with the Cadence server, enabling the use of any programming language that supports HTTP. Consequently, you can leverage this functionality to initiate or terminate workflows from your bash scripts, monitor the status of your cluster, or execute any other operation that the Cadence RPC declaration supports.

Setup

Updating Cadence configuration files

To enable “start workflow” HTTP API, add http section to Cadence RPC configuration settings (e.g., in base.yaml or development.yaml):

services:
frontend:
rpc:
# ...
http:
port: 8800
procedures:
- uber.cadence.api.v1.WorkflowAPI::StartWorkflowExecution

Then you can run Cadence server in the following ways to use HTTP API.

Using local binaries

Build and run ./cadence-server as described in Developing Cadence.

Using “docker run” command

Refer to instructions described in Using docker image for production.

Additionally add two more environment variables:

docker run
<...>
-e FRONTEND_HTTP_PORT=8800 -- HTTP PORT TO LISTEN
-e FRONTEND_HTTP_PROCEDURES=uber.cadence.api.v1.WorkflowAPI::StartWorkflowExecution -- List of API methods exposed
ubercadence/server:<tag>

Using docker-compose

Add HTTP environment variables to docker/docker-compose.yml configuration:

cadence:
image: ubercadence/server:master-auto-setup
ports:
- "8000:8000"
- "8001:8001"
- "8002:8002"
- "8003:8003"
- "7933:7933"
- "7934:7934"
- "7935:7935"
- "7939:7939"
- "7833:7833"
- "8800:8800"
environment:
- "CASSANDRA_SEEDS=cassandra"
- "PROMETHEUS_ENDPOINT_0=0.0.0.0:8000"
- "PROMETHEUS_ENDPOINT_1=0.0.0.0:8001"
- "PROMETHEUS_ENDPOINT_2=0.0.0.0:8002"
- "PROMETHEUS_ENDPOINT_3=0.0.0.0:8003"
- "DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/development.yaml"
- "FRONTEND_HTTP_PORT=8800"
- "FRONTEND_HTTP_PROCEDURES=uber.cadence.api.v1.WorkflowAPI::StartWorkflowExecution"

Using HTTP API

Start a workflow using curl command

curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: rpc-client-name' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::StartWorkflowExecution' \
-d @data.json

Where data.json content looks something like this:

{
"domain": "sample-domain",
"workflowId": "workflowid123",
"execution_start_to_close_timeout": "11s",
"task_start_to_close_timeout": "10s",
"workflowType": {
"name": "workflow_type"
},
"taskList": {
"name": "tasklist-name"
},
"identity": "My custom caller identity",
"requestId": "4D1E4058-6FCF-4BA8-BF16-8FA8B02F9651"
}

HTTP API Reference

Admin API


POST uber.cadence.admin.v1.AdminAPIAddSearchAttribute

Add search attributes to whitelist

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.admin.v1.AdminAPIAddSearchAttribute
Example payload
{
"search_attribute": {
"custom_key": 1
}
}

Search attribute types

typevalue
String1
Keyword2
Int3
Double4
DateTime5
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.admin.v1.AdminAPI::AddSearchAttribute' \
-d \
'{
"search_attribute": {
"custom_key": 1
}
}'
Example successful response

HTTP code: 200

{}

POST uber.cadence.admin.v1.AdminAPICloseShard

Close a shard given a shard ID

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.admin.v1.AdminAPICloseShard
Example payload
{
"shard_id": 0
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.admin.v1.AdminAPI::CloseShard' \
-d \
'{
"shard_id": 0
}'
Example successful response

HTTP code: 200

{}

POST uber.cadence.admin.v1.AdminAPICountDLQMessages

Count DLQ messages

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.admin.v1.AdminAPICountDLQMessages
Example payload

None

Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.admin.v1.AdminAPI::CountDLQMessages'
Example successful response

HTTP code: 200

{
"history": []
}

POST uber.cadence.admin.v1.AdminAPIDescribeCluster

Describe cluster information

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.admin.v1.AdminAPIDescribeCluster
Example payload

None

Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.admin.v1.AdminAPI::DescribeCluster'
Example successful response

HTTP code: 200

{
"supportedClientVersions": {
"goSdk": "1.7.0",
"javaSdk": "1.5.0"
},
"membershipInfo": {
"currentHost": {
"identity": "127.0.0.1:7933"
},
"reachableMembers": [
"127.0.0.1:7933",
"127.0.0.1:7934",
"127.0.0.1:7935",
"127.0.0.1:7939"
],
"rings": [
{
"role": "cadence-frontend",
"memberCount": 1,
"members": [
{
"identity": "127.0.0.1:7933"
}
]
},
{
"role": "cadence-history",
"memberCount": 1,
"members": [
{
"identity": "127.0.0.1:7934"
}
]
},
{
"role": "cadence-matching",
"memberCount": 1,
"members": [
{
"identity": "127.0.0.1:7935"
}
]
},
{
"role": "cadence-worker",
"memberCount": 1,
"members": [
{
"identity": "127.0.0.1:7939"
}
]
}
]
},
"persistenceInfo": {
"historyStore": {
"backend": "shardedNosql"
},
"visibilityStore": {
"backend": "cassandra",
"features": [
{
"key": "advancedVisibilityEnabled"
}
]
}
}
}

POST uber.cadence.admin.v1.AdminAPIDescribeHistoryHost

Describe internal information of history host

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.admin.v1.AdminAPIDescribeHistoryHost
Example payload
{
"host_address": "127.0.0.1:7934"
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.admin.v1.AdminAPI::DescribeHistoryHost' \
-d \
'{
"host_address": "127.0.0.1:7934"
}'
Example successful response

HTTP code: 200

{
"numberOfShards": 4,
"domainCache": {
"numOfItemsInCacheByID": 5,
"numOfItemsInCacheByName": 5
},
"shardControllerStatus": "started",
"address": "127.0.0.1:7934"
}

POST uber.cadence.admin.v1.AdminAPIDescribeShardDistribution

List shard distribution

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.admin.v1.AdminAPIDescribeShardDistribution
Example payload
{
"page_size": 100,
"page_id": 0
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.admin.v1.AdminAPI::DescribeShardDistribution' \
-d \
'{
"page_size": 100,
"page_id": 0
}'
Example successful response

HTTP code: 200

{
"numberOfShards": 4,
"shards": {
"0": "127.0.0.1:7934",
"1": "127.0.0.1:7934",
"2": "127.0.0.1:7934",
"3": "127.0.0.1:7934"
}
}

POST uber.cadence.admin.v1.AdminAPIDescribeWorkflowExecution

Describe internal information of workflow execution

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.admin.v1.AdminAPIDescribeWorkflowExecution
Example payload
{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id",
"run_id": "cc09d5dd-b2fa-46d8-b426-54c96b12d18f"
}
}

run_id is optional and allows to describe a specific run.

Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.admin.v1.AdminAPI::DescribeWorkflowExecution' \
-d \
'{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id",
"run_id": "cc09d5dd-b2fa-46d8-b426-54c96b12d18f"
}
}' | tr -d '\'
Example successful response

HTTP code: 200

{
"shardId": 3,
"historyAddr": "127.0.0.1:7934",
"mutableStateInDatabase": {
"ActivityInfos": {},
"TimerInfos": {},
"ChildExecutionInfos": {},
"RequestCancelInfos": {},
"SignalInfos": {},
"SignalRequestedIDs": {},
"ExecutionInfo": {
"DomainID": "d7aff879-f524-43a8-b340-5a223a69d75b",
"WorkflowID": "sample-workflow-id",
"RunID": "cc09d5dd-b2fa-46d8-b426-54c96b12d18f",
"FirstExecutionRunID": "cc09d5dd-b2fa-46d8-b426-54c96b12d18f",
"ParentDomainID": "",
"ParentWorkflowID": "",
"ParentRunID": "",
"InitiatedID": -7,
"CompletionEventBatchID": 3,
"CompletionEvent": null,
"TaskList": "sample-task-list",
"WorkflowTypeName": "sample-workflow-type",
"WorkflowTimeout": 11,
"DecisionStartToCloseTimeout": 10,
"ExecutionContext": null,
"State": 2,
"CloseStatus": 6,
"LastFirstEventID": 3,
"LastEventTaskID": 8388614,
"NextEventID": 4,
"LastProcessedEvent": -23,
"StartTimestamp": "2023-09-08T05:13:04.24Z",
"LastUpdatedTimestamp": "2023-09-08T05:13:15.247Z",
"CreateRequestID": "8049b932-6c2f-415a-9bb2-241dcf4cfc9c",
"SignalCount": 0,
"DecisionVersion": 0,
"DecisionScheduleID": 2,
"DecisionStartedID": -23,
"DecisionRequestID": "emptyUuid",
"DecisionTimeout": 10,
"DecisionAttempt": 0,
"DecisionStartedTimestamp": 0,
"DecisionScheduledTimestamp": 1694149984240504000,
"DecisionOriginalScheduledTimestamp": 1694149984240503000,
"CancelRequested": false,
"CancelRequestID": "",
"StickyTaskList": "",
"StickyScheduleToStartTimeout": 0,
"ClientLibraryVersion": "",
"ClientFeatureVersion": "",
"ClientImpl": "",
"AutoResetPoints": {},
"Memo": null,
"SearchAttributes": null,
"PartitionConfig": null,
"Attempt": 0,
"HasRetryPolicy": false,
"InitialInterval": 0,
"BackoffCoefficient": 0,
"MaximumInterval": 0,
"ExpirationTime": "0001-01-01T00:00:00Z",
"MaximumAttempts": 0,
"NonRetriableErrors": null,
"BranchToken": null,
"CronSchedule": "",
"IsCron": false,
"ExpirationSeconds": 0
},
"ExecutionStats": null,
"BufferedEvents": [],
"VersionHistories": {
"CurrentVersionHistoryIndex": 0,
"Histories": [
{
"BranchToken": "WQsACgAAACRjYzA5ZDVkZC1iMmZhLTQ2ZDgtYjQyNi01NGM5NmIxMmQxOGYLABQAAAAkYWM5YmIwMmUtMjllYy00YWEyLTlkZGUtZWQ0YWU1NWRhMjlhDwAeDAAAAAAA",
"Items": [
{
"EventID": 3,
"Version": 0
}
]
}
]
},
"ReplicationState": null,
"Checksum": {
"Version": 0,
"Flavor": 0,
"Value": null
}
}
}

Domain API


POST uber.cadence.api.v1.DomainAPIDescribeDomain

Describe existing workflow domain

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.DomainAPIDescribeDomain
Example payload
{
"name": "sample-domain",
"uuid": "d7aff879-f524-43a8-b340-5a223a69d75b"
}

uuid of the domain is optional.

Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.DomainAPI::DescribeDomain' \
-d \
'{
"name": "sample-domain"
}'
Example successful response

HTTP code: 200

{
"domain": {
"id": "d7aff879-f524-43a8-b340-5a223a69d75b",
"name": "sample-domain",
"status": "DOMAIN_STATUS_REGISTERED",
"data": {},
"workflowExecutionRetentionPeriod": "259200s",
"badBinaries": {
"binaries": {}
},
"historyArchivalStatus": "ARCHIVAL_STATUS_ENABLED",
"historyArchivalUri": "file:///tmp/cadence_archival/development",
"visibilityArchivalStatus": "ARCHIVAL_STATUS_ENABLED",
"visibilityArchivalUri": "file:///tmp/cadence_vis_archival/development",
"activeClusterName": "cluster0",
"clusters": [
{
"clusterName": "cluster0"
}
],
"isGlobalDomain": true,
"isolationGroups": {}
}
}

POST uber.cadence.api.v1.DomainAPIListDomains

List all domains in the cluster

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.DomainAPIListDomains
Example payload
{
"page_size": 100
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.DomainAPI::ListDomains' \
-d \
'{
"page_size": 100
}'
Example successful response

HTTP code: 200

{
"domains": [
{
"id": "3116607e-419b-4783-85fc-47726a4c3fe9",
"name": "cadence-batcher",
"status": "DOMAIN_STATUS_REGISTERED",
"description": "Cadence internal system domain",
"data": {},
"workflowExecutionRetentionPeriod": "604800s",
"badBinaries": {
"binaries": {}
},
"historyArchivalStatus": "ARCHIVAL_STATUS_DISABLED",
"visibilityArchivalStatus": "ARCHIVAL_STATUS_DISABLED",
"activeClusterName": "cluster0",
"clusters": [
{
"clusterName": "cluster0"
}
],
"failoverVersion": "-24",
"isolationGroups": {}
},
{
"id": "59c51119-1b41-4a28-986d-d6e377716f82",
"name": "cadence-shadower",
"status": "DOMAIN_STATUS_REGISTERED",
"description": "Cadence internal system domain",
"data": {},
"workflowExecutionRetentionPeriod": "604800s",
"badBinaries": {
"binaries": {}
},
"historyArchivalStatus": "ARCHIVAL_STATUS_DISABLED",
"visibilityArchivalStatus": "ARCHIVAL_STATUS_DISABLED",
"activeClusterName": "cluster0",
"clusters": [
{
"clusterName": "cluster0"
}
],
"failoverVersion": "-24",
"isolationGroups": {}
},
{
"id": "32049b68-7872-4094-8e63-d0dd59896a83",
"name": "cadence-system",
"status": "DOMAIN_STATUS_REGISTERED",
"description": "cadence system workflow domain",
"ownerEmail": "cadence-dev-group@uber.com",
"data": {},
"workflowExecutionRetentionPeriod": "259200s",
"badBinaries": {
"binaries": {}
},
"historyArchivalStatus": "ARCHIVAL_STATUS_DISABLED",
"visibilityArchivalStatus": "ARCHIVAL_STATUS_DISABLED",
"activeClusterName": "cluster0",
"clusters": [
{
"clusterName": "cluster0"
}
],
"failoverVersion": "-24",
"isolationGroups": {}
},
{
"id": "d7aff879-f524-43a8-b340-5a223a69d75b",
"name": "sample-domain",
"status": "DOMAIN_STATUS_REGISTERED",
"data": {},
"workflowExecutionRetentionPeriod": "259200s",
"badBinaries": {
"binaries": {}
},
"historyArchivalStatus": "ARCHIVAL_STATUS_ENABLED",
"historyArchivalUri": "file:///tmp/cadence_archival/development",
"visibilityArchivalStatus": "ARCHIVAL_STATUS_ENABLED",
"visibilityArchivalUri": "file:///tmp/cadence_vis_archival/development",
"activeClusterName": "cluster0",
"clusters": [
{
"clusterName": "cluster0"
}
],
"isGlobalDomain": true,
"isolationGroups": {}
}
],
"nextPageToken": ""
}

Meta API


POST uber.cadence.api.v1.MetaAPIHealth

Health check

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.MetaAPIHealth
Example payload

None

Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.MetaAPI::Health'
Example successful response

HTTP code: 200

{
"ok": true,
"message": "OK"
}

Visibility API


POST uber.cadence.api.v1.VisibilityAPIGetSearchAttributes

Get search attributes

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.VisibilityAPIGetSearchAttributes
Example payload

None

Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.VisibilityAPI::GetSearchAttributes'
Example successful response

HTTP code: 200

{
"keys": {
"BinaryChecksums": "INDEXED_VALUE_TYPE_KEYWORD",
"CadenceChangeVersion": "INDEXED_VALUE_TYPE_KEYWORD",
"CloseStatus": "INDEXED_VALUE_TYPE_INT",
"CloseTime": "INDEXED_VALUE_TYPE_INT",
"CustomBoolField": "INDEXED_VALUE_TYPE_BOOL",
"CustomDatetimeField": "INDEXED_VALUE_TYPE_DATETIME",
"CustomDomain": "INDEXED_VALUE_TYPE_KEYWORD",
"CustomDoubleField": "INDEXED_VALUE_TYPE_DOUBLE",
"CustomIntField": "INDEXED_VALUE_TYPE_INT",
"CustomKeywordField": "INDEXED_VALUE_TYPE_KEYWORD",
"CustomStringField": "INDEXED_VALUE_TYPE_STRING",
"DomainID": "INDEXED_VALUE_TYPE_KEYWORD",
"ExecutionTime": "INDEXED_VALUE_TYPE_INT",
"HistoryLength": "INDEXED_VALUE_TYPE_INT",
"IsCron": "INDEXED_VALUE_TYPE_KEYWORD",
"NewKey": "INDEXED_VALUE_TYPE_KEYWORD",
"NumClusters": "INDEXED_VALUE_TYPE_INT",
"Operator": "INDEXED_VALUE_TYPE_KEYWORD",
"Passed": "INDEXED_VALUE_TYPE_BOOL",
"RolloutID": "INDEXED_VALUE_TYPE_KEYWORD",
"RunID": "INDEXED_VALUE_TYPE_KEYWORD",
"ShardID": "INDEXED_VALUE_TYPE_INT",
"StartTime": "INDEXED_VALUE_TYPE_INT",
"TaskList": "INDEXED_VALUE_TYPE_KEYWORD",
"TestNewKey": "INDEXED_VALUE_TYPE_STRING",
"UpdateTime": "INDEXED_VALUE_TYPE_INT",
"WorkflowID": "INDEXED_VALUE_TYPE_KEYWORD",
"WorkflowType": "INDEXED_VALUE_TYPE_KEYWORD",
"addon": "INDEXED_VALUE_TYPE_KEYWORD",
"addon-type": "INDEXED_VALUE_TYPE_KEYWORD",
"environment": "INDEXED_VALUE_TYPE_KEYWORD",
"project": "INDEXED_VALUE_TYPE_KEYWORD",
"service": "INDEXED_VALUE_TYPE_KEYWORD",
"user": "INDEXED_VALUE_TYPE_KEYWORD"
}
}

POST uber.cadence.api.v1.VisibilityAPIListClosedWorkflowExecutions

List closed workflow executions in a domain

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.VisibilityAPIListClosedWorkflowExecutions
Example payloads

startTimeFilter is required while executionFilter and typeFilter are optional.

{
"domain": "sample-domain",
"start_time_filter": {
"earliest_time": "2023-01-01T00:00:00Z",
"latest_time": "2023-12-31T00:00:00Z"
}
}
{
"domain": "sample-domain",
"start_time_filter": {
"earliest_time": "2023-01-01T00:00:00Z",
"latest_time": "2023-12-31T00:00:00Z"
},
"execution_filter": {
"workflow_id": "sample-workflow-id",
"run_id": "71c3d47b-454a-4315-97c7-15355140094b"
}
}
{
"domain": "sample-domain",
"start_time_filter": {
"earliest_time": "2023-01-01T00:00:00Z",
"latest_time": "2023-12-31T00:00:00Z"
},
"type_filter": {
"name": "sample-workflow-type"
}
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.VisibilityAPI::ListClosedWorkflowExecutions' \
-d \
'{
"domain": "sample-domain",
"start_time_filter": {
"earliest_time": "2023-01-01T00:00:00Z",
"latest_time": "2023-12-31T00:00:00Z"
}
}'
Example successful response

HTTP code: 200

{
"executions": [
{
"workflowExecution": {
"workflowId": "sample-workflow-id",
"runId": "71c3d47b-454a-4315-97c7-15355140094b"
},
"type": {
"name": "sample-workflow-type"
},
"startTime": "2023-09-08T06:31:18.778Z",
"closeTime": "2023-09-08T06:32:18.782Z",
"closeStatus": "WORKFLOW_EXECUTION_CLOSE_STATUS_TIMED_OUT",
"historyLength": "5",
"executionTime": "2023-09-08T06:31:18.778Z",
"memo": {},
"searchAttributes": {
"indexedFields": {}
},
"taskList": "sample-task-list"
}
],
"nextPageToken": ""
}

POST uber.cadence.api.v1.VisibilityAPIListOpenWorkflowExecutions

List open workflow executions in a domain

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.VisibilityAPIListOpenWorkflowExecutions
Example payloads

startTimeFilter is required while executionFilter and typeFilter are optional.

{
"domain": "sample-domain",
"start_time_filter": {
"earliest_time": "2023-01-01T00:00:00Z",
"latest_time": "2023-12-31T00:00:00Z"
}
}
{
"domain": "sample-domain",
"start_time_filter": {
"earliest_time": "2023-01-01T00:00:00Z",
"latest_time": "2023-12-31T00:00:00Z"
},
"execution_filter": {
"workflow_id": "sample-workflow-id",
"run_id": "71c3d47b-454a-4315-97c7-15355140094b"
}
}
{
"domain": "sample-domain",
"start_time_filter": {
"earliest_time": "2023-01-01T00:00:00Z",
"latest_time": "2023-12-31T00:00:00Z"
},
"type_filter": {
"name": "sample-workflow-type"
}
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.VisibilityAPI::ListOpenWorkflowExecutions' \
-d \
'{
"domain": "sample-domain",
"start_time_filter": {
"earliest_time": "2023-01-01T00:00:00Z",
"latest_time": "2023-12-31T00:00:00Z"
}
}'
Example successful response

HTTP code: 200

{
"executions": [
{
"workflowExecution": {
"workflowId": "sample-workflow-id",
"runId": "5dbabeeb-82a2-41ed-bf55-dc732a4d46ce"
},
"type": {
"name": "sample-workflow-type"
},
"startTime": "2023-09-12T02:17:46.596Z",
"executionTime": "2023-09-12T02:17:46.596Z",
"memo": {},
"searchAttributes": {
"indexedFields": {}
},
"taskList": "sample-task-list"
}
],
"nextPageToken": ""
}

Workflow API


POST uber.cadence.api.v1.WorkflowAPIDescribeTaskList

Describe pollers info of tasklist

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPIDescribeTaskList
Example payload
{
"domain": "sample-domain",
"task_list": {
"name": "sample-task-list",
"kind": 1
},
"task_list_type": 1,
"include_task_list_status": true
}

task_list kind is optional.

Task list kinds

typevalue
TaskListKindNormal1
TaskListKindSticky2

Task list types

typevalue
TaskListTypeDecision1
TaskListTypeActivity2
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::DescribeTaskList' \
-d \
'{
"domain": "sample-domain",
"task_list": {
"name": "sample-task-list",
"kind": 1
},
"task_list_type": 1,
"include_task_list_status": true
}'
Example successful response

HTTP code: 200

{
"taskListStatus": {
"readLevel": "200000",
"ratePerSecond": 100000,
"taskIdBlock": {
"startId": "200001",
"endId": "300000"
}
}
}

POST uber.cadence.api.v1.WorkflowAPIDescribeWorkflowExecution

Describe a workflow execution

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPIDescribeWorkflowExecution
Example payload
{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id",
"run_id": "5dbabeeb-82a2-41ed-bf55-dc732a4d46ce"
}
}

run_id is optional and allows to describe a specific run.

Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::DescribeWorkflowExecution' \
-d \
'{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id",
"run_id": "5dbabeeb-82a2-41ed-bf55-dc732a4d46ce"
}
}'
Example successful response

HTTP code: 200

{
"executionConfiguration": {
"taskList": {
"name": "sample-task-list"
},
"executionStartToCloseTimeout": "11s",
"taskStartToCloseTimeout": "10s"
},
"workflowExecutionInfo": {
"workflowExecution": {
"workflowId": "sample-workflow-id",
"runId": "5dbabeeb-82a2-41ed-bf55-dc732a4d46ce"
},
"type": {
"name": "sample-workflow-type"
},
"startTime": "2023-09-12T02:17:46.596Z",
"closeTime": "2023-09-12T02:17:57.602707Z",
"closeStatus": "WORKFLOW_EXECUTION_CLOSE_STATUS_TIMED_OUT",
"historyLength": "3",
"executionTime": "2023-09-12T02:17:46.596Z",
"memo": {},
"searchAttributes": {},
"autoResetPoints": {}
},
"pendingDecision": {
"state": "PENDING_DECISION_STATE_SCHEDULED",
"scheduledTime": "2023-09-12T02:17:46.596982Z",
"originalScheduledTime": "2023-09-12T02:17:46.596982Z"
}
}

POST uber.cadence.api.v1.WorkflowAPIGetClusterInfo

Get supported client versions for the cluster

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPIGetClusterInfo
Example payload

None

Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::GetClusterInfo'
Example successful response

HTTP code: 200

{
"supportedClientVersions": {
"goSdk": "1.7.0",
"javaSdk": "1.5.0"
}
}

POST uber.cadence.api.v1.WorkflowAPIGetTaskListsByDomain

Get the task lists in a domain

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPIGetTaskListsByDomain
Example payload
{
"domain": "sample-domain"
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::GetTaskListsByDomain' \
-d \
'{
"domain": "sample-domain"
}'
Example successful response

HTTP code: 200

{
"decisionTaskListMap": {},
"activityTaskListMap": {}
}

POST uber.cadence.api.v1.WorkflowAPIGetWorkflowExecutionHistory

Get the history of workflow executions

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPIGetWorkflowExecutionHistory
Example payload
{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id"
}
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::GetWorkflowExecutionHistory' \
-d \
'{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id"
}
}'
Example successful response

HTTP code: 200

{
"history": {
"events": [
{
"eventId": "1",
"eventTime": "2023-09-12T05:34:46.107550Z",
"taskId": "9437321",
"workflowExecutionStartedEventAttributes": {
"workflowType": {
"name": "sample-workflow-type"
},
"taskList": {
"name": "sample-task-list"
},
"input": {
"data": "IkN1cmwhIg=="
},
"executionStartToCloseTimeout": "61s",
"taskStartToCloseTimeout": "60s",
"originalExecutionRunId": "fd7c2283-79dd-458c-8306-e2d1d8217613",
"identity": "client-name-visible-in-history",
"firstExecutionRunId": "fd7c2283-79dd-458c-8306-e2d1d8217613",
"firstDecisionTaskBackoff": "0s"
}
},
{
"eventId": "2",
"eventTime": "2023-09-12T05:34:46.107565Z",
"taskId": "9437322",
"decisionTaskScheduledEventAttributes": {
"taskList": {
"name": "sample-task-list"
},
"startToCloseTimeout": "60s"
}
},
{
"eventId": "3",
"eventTime": "2023-09-12T05:34:59.184511Z",
"taskId": "9437330",
"workflowExecutionCancelRequestedEventAttributes": {
"cause": "dummy",
"identity": "client-name-visible-in-history"
}
},
{
"eventId": "4",
"eventTime": "2023-09-12T05:35:47.112156Z",
"taskId": "9437332",
"workflowExecutionTimedOutEventAttributes": {
"timeoutType": "TIMEOUT_TYPE_START_TO_CLOSE"
}
}
]
}
}

POST uber.cadence.api.v1.WorkflowAPIListTaskListPartitions

List all the task list partitions and the hostname for partitions

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPIListTaskListPartitions
Example payload
{
"domain": "sample-domain",
"task_list": {
"name": "sample-task-list"
}
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::ListTaskListPartitions' \
-d \
'{
"domain": "sample-domain",
"task_list": {
"name": "sample-task-list"
}
}'
Example successful response

HTTP code: 200

{
"activityTaskListPartitions": [
{
"key": "sample-task-list",
"ownerHostName": "127.0.0.1:7935"
}
],
"decisionTaskListPartitions": [
{
"key": "sample-task-list",
"ownerHostName": "127.0.0.1:7935"
}
]
}

POST uber.cadence.api.v1.WorkflowAPIRefreshWorkflowTasks

Refresh all the tasks of a workflow

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPIRefreshWorkflowTasks
Example payload
{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id",
"run_id": "b7973fb8-2229-4fe7-ad70-c919c1ae8774"
}
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::RefreshWorkflowTasks' \
-d \
'{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id",
"run_id": "b7973fb8-2229-4fe7-ad70-c919c1ae8774"
}
}'
Example successful response

HTTP code: 200

{}

POST uber.cadence.api.v1.WorkflowAPIRequestCancelWorkflowExecution

Cancel a workflow execution

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPIRequestCancelWorkflowExecution
Example payload
{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id",
"run_id": "b7973fb8-2229-4fe7-ad70-c919c1ae8774"
},
"request_id": "8049B932-6C2F-415A-9BB2-241DCF4CFC9C",
"cause": "dummy",
"identity": "client-name-visible-in-history",
"first_execution_run_id": "b7973fb8-2229-4fe7-ad70-c919c1ae8774"
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::RequestCancelWorkflowExecution' \
-d \
'{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id",
"run_id": "fd7c2283-79dd-458c-8306-e2d1d8217613"
},
"request_id": "8049B932-6C2F-415A-9BB2-241DCF4CFC9C",
"cause": "dummy",
"identity": "client-name-visible-in-history",
"first_execution_run_id": "fd7c2283-79dd-458c-8306-e2d1d8217613"
}'
Example successful response

HTTP code: 200

{}

POST uber.cadence.api.v1.WorkflowAPIRestartWorkflowExecution

Restart a previous workflow execution

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPIRestartWorkflowExecution
Example payload
{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id",
"run_id": "0f95ad5b-03bc-4c6b-8cf0-1f3ea08eb86a"
},
"identity": "client-name-visible-in-history",
"reason": "dummy"
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::RestartWorkflowExecution' \
-d \
'{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id",
"run_id": "0f95ad5b-03bc-4c6b-8cf0-1f3ea08eb86a"
},
"identity": "client-name-visible-in-history",
"reason": "dummy"
}'
Example successful response

HTTP code: 200

{
"runId": "82914458-3221-42b4-ae54-2e66dff864f7"
}

POST uber.cadence.api.v1.WorkflowAPISignalWithStartWorkflowExecution

Signal the current open workflow if exists, or attempt to start a new run based on IDResuePolicy and signals it

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPISignalWithStartWorkflowExecution
Example payload
{
"start_request": {
"domain": "sample-domain",
"workflow_id": "sample-workflow-id",
"execution_start_to_close_timeout": "61s",
"task_start_to_close_timeout": "60s",
"workflow_type": {
"name": "sample-workflow-type"
},
"task_list": {
"name": "sample-task-list"
},
"identity": "client-name-visible-in-history",
"request_id": "8049B932-6C2F-415A-9BB2-241DCF4CFC9C",
"input": {
"data": "IkN1cmwhIg=="
}
},
"signal_name": "channelA",
"signal_input": {
"data": "MTA="
}
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::SignalWithStartWorkflowExecution' \
-d \
'{
"start_request": {
"domain": "sample-domain",
"workflow_id": "sample-workflow-id",
"execution_start_to_close_timeout": "61s",
"task_start_to_close_timeout": "60s",
"workflow_type": {
"name": "sample-workflow-type"
},
"task_list": {
"name": "sample-task-list"
},
"identity": "client-name-visible-in-history",
"request_id": "8049B932-6C2F-415A-9BB2-241DCF4CFC9C",
"input": {
"data": "IkN1cmwhIg=="
}
},
"signal_name": "channelA",
"signal_input": {
"data": "MTA="
}
}'
Example successful response

HTTP code: 200

{
"runId": "cc09d5dd-b2fa-46d8-b426-54c96b12d18f"
}

POST uber.cadence.api.v1.WorkflowAPISignalWorkflowExecution

Signal a workflow execution

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPISignalWorkflowExecution
Example payload
{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id",
"run_id": "cc09d5dd-b2fa-46d8-b426-54c96b12d18f"
},
"signal_name": "channelA",
"signal_input": {
"data": "MTA="
}
}

run_id is optional and allows to signal a specific run.

Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::SignalWorkflowExecution' \
-d \
'{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id"
},
"signal_name": "channelA",
"signal_input": {
"data": "MTA="
}
}'
Example successful response

HTTP code: 200

{}

POST uber.cadence.api.v1.WorkflowAPIStartWorkflowExecution

Start a new workflow execution

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPIStartWorkflowExecution
Example payload
{
"domain": "sample-domain",
"workflow_id": "sample-workflow-id",
"execution_start_to_close_timeout": "61s",
"task_start_to_close_timeout": "60s",
"workflow_type": {
"name": "sample-workflow-type"
},
"task_list": {
"name": "sample-task-list"
},
"identity": "client-name-visible-in-history",
"request_id": "8049B932-6C2F-415A-9BB2-241DCF4CFC9C",
"input": {
"data": "IkN1cmwhIg=="
}
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::StartWorkflowExecution' \
-d \
'{
"domain": "sample-domain",
"workflow_id": "sample-workflow-id",
"execution_start_to_close_timeout": "61s",
"task_start_to_close_timeout": "60s",
"workflow_type": {
"name": "sample-workflow-type"
},
"task_list": {
"name": "sample-task-list"
},
"identity": "client-name-visible-in-history",
"request_id": "8049B932-6C2F-415A-9BB2-241DCF4CFC9C",
"input": {
"data": "IkN1cmwhIg=="
}
}'
Example successful response

HTTP code: 200

{
"runId": "cc09d5dd-b2fa-46d8-b426-54c96b12d18f"
}

POST uber.cadence.api.v1.WorkflowAPITerminateWorkflowExecution

Terminate a new workflow execution

Headers
nameexample
context-ttl-ms2000
rpc-callercurl-client
rpc-servicecadence-frontend
rpc-encodingjson
rpc-procedureuber.cadence.api.v1.WorkflowAPITerminateWorkflowExecution
Example payloads
{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id"
}
}
{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id",
"run_id": "0f95ad5b-03bc-4c6b-8cf0-1f3ea08eb86a"
},
"reason": "dummy",
"identity": "client-name-visible-in-history",
"first_execution_run_id": "0f95ad5b-03bc-4c6b-8cf0-1f3ea08eb86a"
}
Example cURL
curl -X POST http://0.0.0.0:8800 \
-H 'context-ttl-ms: 2000' \
-H 'rpc-caller: curl-client' \
-H 'rpc-service: cadence-frontend' \
-H 'rpc-encoding: json' \
-H 'rpc-procedure: uber.cadence.api.v1.WorkflowAPI::TerminateWorkflowExecution' \
-d \
'{
"domain": "sample-domain",
"workflow_execution": {
"workflow_id": "sample-workflow-id"
}
}'
Example successful response

HTTP code: 200

{}