# Recipes

# Quick reference

PRIVATE BETA

The following endpoints are in private beta:

Private beta features are available in production but only to selected customers. Customers must opt in and be accepted into the beta.

During the private beta, Workato may update its functionality or change its availability without prior notice.

Type Resource Description
GET /api/recipes/:id Get recipe details.
POST /api/recipes Create a recipe.
POST /api/recipes/:id/copy Copy a recipe.
PUT /api/recipes/:id Update a recipe.
GET /api/recipes List recipes belonging to user.
PUT /api/recipes/:id/start Start recipe.
PUT /api/recipes/:id/stop Stop recipe.
DELETE /api/recipes/:id Delete recipe.
POST /api/recipes/:recipe_id/reset_trigger Reset recipe trigger.
PUT /api/recipes/:recipe_id/connect Update connection for an application in a stopped recipe.
POST /api/recipes/:recipe_id/poll_now Activate a polling trigger for a recipe.
GET /api/recipes/:recipe_id/versions Get recipe versions.
GET /api/recipes/:recipe_id/versions/:id Get details of a recipe version.
PATCH/PUT /api/recipes/:recipe_id/versions/:id Update a recipe version comment.
GET /api/recipes/:recipe_id/health Retrieve the most recent optimization report for a recipe.
POST /api/recipes/:recipe_id/health Queue a performance scan using Performance Copilot.

# Get recipe details

Returns details about a recipe object. Lifetime task count has task data starting from March 19, 2021.

GET /api/recipes/:id

# URL parameters

Name Type Description
id integer
required
Recipe ID.

# Query parameters

Name Type Description
includes[] array of strings
optional
Specifies additional fields to include in the response. Accepts tags as a value. If tags is supplied in the request, the response includes a tags field for the recipe. This field contains an array of zero or more tag handles (strings).

# Sample request

curl  -X GET 'https://www.workato.com/api/recipes/12389?includes[]=tags' \
      -H 'Authorization: Bearer <api_token>'

# Response

{
    "id": 12389,
    "user_id": 4848,
    "name": "New webhook call will get JIRA ticket information",
    "created_at": "2016-08-03T11:06:23.950-07:00",
    "updated_at": "2021-11-29T23:31:58.735-08:00",
    "copy_count": 3,
    "trigger_application": "workato_webhooks",
    "action_applications": [
        "jira"
    ],
    "applications": [
        "workato_webhooks",
        "jira"
    ],
    "description": "New webhook call will get JIRA ticket information",
    "parameters_schema": [],
    "parameters": {},
    "folder_id": 4724,
    "running": false,
    "job_succeeded_count": 0,
    "job_failed_count": 0,
    "lifetime_task_count": 0,
    "last_run_at": "2016-08-03T11:06:51.481-07:00",
    "stopped_at": "2016-08-03T11:22:57.285-07:00",
    "webhook_url": "https://www.workato.com/webhooks/rest/51b6a38f-0102-494d-8290-9d550aeeab3c/webhook_recipe",
    "stop_cause": null,
    "config": [
        {
            "keyword": "application",
            "name": "jira",
            "provider": "jira",
            "skip_validation": false,
            "account_id": null
        },
        {
            "keyword": "application",
            "name": "workato_webhooks",
            "provider": "workato_webhooks",
            "skip_validation": false,
            "account_id": null
        }
    ],
    "trigger_closure": null,
    "code": "...truncated...",
    "version_no": 2,
    "version_author_name": "Jennifer Diaz",
    "version_author_email": "[email protected]",
    "version_comment": "Refactored webhook logic to improve error handling and added support for custom JIRA fields",
    "author_name": "Kevin Smith",
    "tags": [
        "tag-ANMNxAz9-oYDJRm",
        "tag-ANgeffPL-3gxQwA"
    ]  
}

# Create a recipe

Creates a recipe in Workato based on parameters in the request.

POST /api/recipes

# Payload

Name Type Description
recipe object
required
The recipe object.
recipe[name] string
optional
Name of the recipe.
recipe[code] string
required
JSON string representing the recipe lines.
recipe[config] string
optional
JSON string representing the connection lines.
recipe[folder_id] string
conditionally required
Folder for the recipe
recipe[description] string
optional
Description of the recipe.

FOLDER_ID IS CONDITIONALLY REQUIRED

The folder_id parameter is required if the target workspace's Home assets folder has been converted to a project. Refer to the Projects page's Home assets project section for more information.

# Sample request

curl  -X POST https://www.workato.com/api/recipes \
      -H 'Authorization: Bearer <api_token>' \
      -H 'Content-Type: application/json' \
      -d  '{
             "recipe": {
               "name":"Send mail",
               "code":"{\"number\":0,\"provider\":\"clock\",\"name\":\"scheduled_event\",\"as\":\"timer\",\"title\":null,\"description\":\"<span class=\\\"provider\\\">Trigger</span> on a <span class=\\\"provider\\\">specified schedule</span>\",\"keyword\":\"trigger\",\"dynamicPickListSelection\":{},\"toggleCfg\":{},\"input\":{\"time_unit\":\"minutes\",\"trigger_every\":\"5\"},\"extended_input_schema\":[{\"type\":\"string\",\"name\":\"trigger_every\",\"control_type\":\"integer\",\"label\":\"Trigger every\",\"hint\":\"Define repeating schedule. Enter whole numbers only.\\n                        This field can be set to a minimum of 5 minutes.\",\"default\":\"5\",\"optional\":false,\"extends_schema\":true},{\"type\":\"date_time\",\"name\":\"start_after\",\"control_type\":\"date_time\",\"label\":\"Start after\",\"hint\":\"Set date and time to start or leave blank to start immediately. <b>Once recipe has been run or tested, value cannot be changed.</b>\",\"optional\":true,\"extends_schema\":true,\"since_field\":true,\"render_input\":\"date_time_conversion\",\"parse_output\":\"date_time_conversion\"}],\"block\":[{\"number\":1,\"provider\":\"email\",\"name\":\"send_mail\",\"as\":\"send_mail\",\"keyword\":\"action\",\"dynamicPickListSelection\":{},\"toggleCfg\":{},\"input\":{\"email_type\":\"html\"},\"uuid\":\"cd865246-ece7-4188-845e-33d021664be3\"}],\"uuid\":\"c4b0778d-5a23-4c52-a5bb-4a99ae5d25ae\"}",
               "config":"[{\"keyword\":\"application\",\"name\":\"clock\",\"provider\":\"clock\"},{\"keyword\":\"application\",\"name\":\"email\",\"provider\":\"email\"}]",
               "folder_id": "17254"
            }
          }'

# Response

{
  "success": true,
  "id": 116
}

# Update a recipe

Updates an existing recipe in Workato specified based on recipe ID. Recipe details are defined based on parameters in the request.

PUT /api/recipes/:id

# URL parameters

Name Type Description
id integer
required
Recipe ID.

# Payload

Name Type Description
recipe object
optional
The recipe object.
recipe[name] string
optional
Name of the recipe.
recipe[code] string
optional
JSON string representing the recipe lines.
recipe[config] string
optional
JSON string representing the connection lines.
recipe[folder_id] string
optional
Folder for the recipe
recipe[description] string
optional
Description of the recipe.

# Sample request

curl  -X PUT 'https://www.workato.com/api/recipes/123421' \
      -H 'Authorization: Bearer <api_token>' \
      -H 'Content-Type: application/json' \
      -d  '{
             "recipe": {
               "name":"Send mail",
               "code":"{\"number\":0,\"provider\":\"clock\",\"name\":\"scheduled_event\",\"as\":\"timer\",\"title\":null,\"description\":\"<span class=\\\"provider\\\">Trigger</span> on a <span class=\\\"provider\\\">specified schedule</span>\",\"keyword\":\"trigger\",\"dynamicPickListSelection\":{},\"toggleCfg\":{},\"input\":{\"time_unit\":\"minutes\",\"trigger_every\":\"5\"},\"extended_input_schema\":[{\"type\":\"string\",\"name\":\"trigger_every\",\"control_type\":\"integer\",\"label\":\"Trigger every\",\"hint\":\"Define repeating schedule. Enter whole numbers only.\\n                        This field can be set to a minimum of 5 minutes.\",\"default\":\"5\",\"optional\":false,\"extends_schema\":true},{\"type\":\"date_time\",\"name\":\"start_after\",\"control_type\":\"date_time\",\"label\":\"Start after\",\"hint\":\"Set date and time to start or leave blank to start immediately. <b>Once recipe has been run or tested, value cannot be changed.</b>\",\"optional\":true,\"extends_schema\":true,\"since_field\":true,\"render_input\":\"date_time_conversion\",\"parse_output\":\"date_time_conversion\"}],\"block\":[{\"number\":1,\"provider\":\"email\",\"name\":\"send_mail\",\"as\":\"send_mail\",\"keyword\":\"action\",\"dynamicPickListSelection\":{},\"toggleCfg\":{},\"input\":{\"email_type\":\"html\"},\"uuid\":\"cd865246-ece7-4188-845e-33d021664be3\"}],\"uuid\":\"c4b0778d-5a23-4c52-a5bb-4a99ae5d25ae\"}",
               "config":"[{\"keyword\":\"application\",\"name\":\"clock\",\"provider\":\"clock\"},{\"keyword\":\"application\",\"name\":\"email\",\"provider\":\"email\"}]",
               "folder_id": "17254"
             }
          }'

# Response

{
  "success": true
}

UPDATING A RUNNING RECIPE IS PROHIBITED

Any update call to a running recipe will return an error.

# Copy a recipe

Copy an existing recipe in Workato specified based on recipe ID.

POST /api/recipes/:id/copy

# URL parameters

Name Type Description
id integer
required
Recipe ID.

# Payload

Name Type Description
folder_id string
conditionally required
Folder id for the copied recipe

FOLDER_ID IS CONDITIONALLY REQUIRED

The folder_id parameter is required if the target workspace's Home assets folder has been converted to a project. Refer to the Projects page's Home assets project section for more information.

# Sample request

curl  -X POST 'https://www.workato.com/api/recipes/123421/copy' \
      -H 'Authorization: Bearer <api_token>' \
      -H 'Content-Type: application/json'

# Response

{
  "success": true,
  "new_flow_id": 39404
}

# List recipes belonging to a user

Returns a list of recipes belonging to the authenticated user. Recipes are returned in descending ID order.

GET /api/recipes

# Query parameters

Name Type Description
adapter_names_all string
optional
List of adapters names, separated by commas. Resulting recipes should use all of the given adapters.
adapter_names_any string
optional
List of adapters names, separated by commas. Resulting recipes should use at least one of the given adapters.
folder_id string
optional
Return the recipes in the specified folder.
order string
optional
Set ordering method. Possible options: activity, default.
page integer
optional
Page number (defaults to 1).
per_page integer
optional
Specifies the number of recipes to include per page. Defaults to 100. The maximum value is 100.
running boolean
optional
If true, returns running recipes.
since_id integer
optional
Use this parameter to retrieve recipes with IDs lower than the ID provided in the request. For example, if since_id=15500, Workato returns all recipes with IDs lower than 15500 (0-14999).
stopped_after string
optional
Filter the list of recipes to exclude only those stopped after the date and time you specify. The date and time must be provided in ISO 8601 format according to the following pattern: YYYY-MM-DDTHH:MM:SSZ.
stop_cause string
optional
Reason that the recipe stopped. Possible reasons include —
trigger_errors_limit: Recipe was stopped due to consecutive trigger errors
action_quota_limit: Customer exceeded plan's task limit
trial_expired: Customer's trial expired
txn_quota_limit: Customer exceeded plan's job limit
updated_after string
optional
Filter the list of recipes to include only those updated after the date and time you specify. The date and time must be provided in ISO 8601 format according to the following pattern: YYYY-MM-DDTHH:MM:SSZ.
includes[] array of strings
optional
Specifies additional fields to include in the response. Accepts tags as a value. If tags is supplied in the request, the response includes a tags field for each recipe. This field contains an array of zero or more tag handles (strings).

# Sample request

curl  -X GET https://www.workato.com/api/recipes?includes[]=tags&adapter_names_any=custom_adapter,custom_adapter1 \
      -H 'Authorization: Bearer <api_token>'

# Response

{
    "items": [
        {
            "id": 1913515,
            "user_id": 4848,
            "name": "Callable service: JIRA ticket sync",
            "created_at": "2021-11-25T07:07:38.568-08:00",
            "updated_at": "2021-11-25T07:14:40.822-08:00",
            "copy_count": 1,
            "trigger_application": "workato_service",
            "action_applications": [
                "jira"
            ],
            "applications": [
                "workato_service",
                "jira"
            ],
            "description": "When there is a new call for callable recipe, do action",
            "parameters_schema": [],
            "parameters": {},
            "webhook_url": null,
            "folder_id": 241557,
            "running": false,
            "job_succeeded_count": 1,
            "job_failed_count": 0,
            "lifetime_task_count": 1,
            "last_run_at": "2021-11-25T07:10:27.424-08:00",
            "stopped_at": "2021-11-25T07:11:06.346-08:00",
            "version_no": 3,
            "stop_cause": null,
            "config": [
                {
                    "keyword": "application",
                    "name": "workato_service",
                    "provider": "workato_service",
                    "skip_validation": false,
                    "account_id": null
                },
                {
                    "keyword": "application",
                    "name": "jira",
                    "provider": "jira",
                    "skip_validation": false,
                    "account_id": null
                }
            ],
            "trigger_closure": null,
            "code": "...truncated...",
            "author_name": "Alex Fisher",
            "version_author_name": "Alex Fisher",
            "version_author_email": "[email protected]",
            "version_comment": null,
            "tags": [
                "tag-ANMNxAz9-oYDJRm",
                "tag-ANgeffPL-3gxQwA"
            ]
        }
      ]
}

# Start a recipe

Starts a recipe specified by recipe ID.

PUT /api/recipes/:id/start

# URL parameters

Name Type Description
id integer
optional
Recipe ID.

# Sample request

curl  -X PUT https://www.workato.com/api/recipes/<recipe_id>/start \
      -H 'Authorization: Bearer <api_token>'

# Response

{
  "success": true
}

# Stop a recipe

Stops a recipe specified by a recipe ID.

PUT /api/recipes/:id/stop  

# URL parameters

Name Type Description
id integer
optional
Recipe ID.

# Sample request

curl  -X PUT https://www.workato.com/api/recipes/<recipe_id>/stop \
      -H 'Authorization: Bearer <api_token>'

# Response

{
  "success": true
}

# Delete a recipe

Delete a recipe specified by ID.

DELETE /api/recipes/:id

# URL parameters

Name Type Description
id integer
optional
Recipe ID.

# Sample request

curl  -X DELETE https://www.workato.com/api/recipes/<recipe_id> \
      -H 'Authorization: Bearer <api_token>'

# Response

{
  "success": true
}

# Reset recipe trigger

Reset recipe trigger cursor by recipe ID. Use this endpoint to re-sync data from the source application. The recipe should be designed to handle duplicate records because a re-sync processes every record again. Using this endpoint outside data orchestration scenarios may result in unintended behaviors, including data loss or corruption. Resetting a recipe trigger retains job history and records an event in the recipe's Activity audit log.

If you reset the trigger of an active recipe, Workato completes all jobs with a running, deferred, or pending status first. Then, it proceeds to the new jobs created by the reset trigger.

TRIGGER COMPATIBILITY

This endpoint is only compatible with polling and scheduled triggers. Resetting other triggers may have no effect, or cause unintended behaviors. These triggers include:

  • New CSV file in folder triggers
  • Function triggers
  • API triggers
  • RecipeOps triggers
  • Workbot triggers
  • Deprecated Kafka triggers (compatible with latest triggers)
POST /api/recipes/:recipe_id/reset_trigger

# URL parameters

Name Type Description
recipe_id integer
required
ID of the recipe to reset.

# Sample request

curl  -X POST 'https://www.workato.com/api/recipes/91929/reset_trigger' \
      -H 'Authorization: Bearer <api_token>'

# Response

{
    "success": true
}

# Update a connection for a recipe

Updates the chosen connection for a specific connector in a stopped recipe.

PUT /api/recipes/:recipe_id/connect

# URL parameters

Name Type Description
recipe_id integer
required
ID of the recipe.

# Payload

Name Type Description
adapter_name string
required
The internal name of the connector. e.g. salesforce
connection_id integer
required
The ID of the connection that replaces the existing one.

# Sample request

curl  -X PUT 'https://www.workato.com/api/recipes/123421/connect' \
      -H 'Authorization: Bearer <api_token>' \
      -H 'Content-Type: application/json' \
      -d  '{
          "adapter_name": "salesforce",
          "connection_id": 772461
      }'

# Response

{
    "success": true
}

# Activate a polling trigger for a recipe

Initiate the polling function of a recipe with polling triggers by providing the recipe ID. This action causes the recipe's polling trigger to execute immediately.

Use the jobs APIs to check the status of a particular recipe.

POST /api/recipes/:recipe_id/poll_now

# Path parameters

Name Type Description
recipe_id integer
required
The ID of the recipe you plan to start.

# Sample request

curl  -X POST https://www.workato.com/api/recipes/12345/poll_now \
      -H 'Authorization: Bearer <api_token>'

# Response

# Job started

{
    "success": true
}

# Job already in progress

{ 
    "message": "Recipe is currently in trigger back off mode till 2023-06-23T23:02" }
}

# Error codes

Name Description Sample reply
404 Not found {"success": false, "message": "Not Found"}
429 Too many requests. A Retry-After header (opens new window) specifies how long to wait before making a new request. {"message": "Recipe is currently in trigger back off mode till 2023-06-23T11:02"}, or {"message": "Not enough transaction credit"}, or {"message": "Not enough action quota"}
400 Bad request {"message":"Trial has expired"}

# Get recipe versions

Retrieve detailed information about all versions of a specified recipe.

GET /api/recipes/:recipe_id/versions

# URL parameters

Name Type Description
recipe_id string
required
The ID of the recipe for which you plan to retrieve version details.

# Query parameters

Name Type Description
page integer
optional
Page number. Defaults to 1.
per_page integer
optional
Page size. Defaults to 100. The maximum is 100.

# Sample request

curl  -X GET 'https://www.workato.com/api/recipes/12389/versions' \
      -H 'Authorization: Bearer <api_token>'

# Response

{
    "data": [
        {
            "id": 397103,
            "comment": "Updated the recipe to include new Slack channels for onboarding new employees based on their roles",
            "version_no": 2,
            "author_name": "Alex",
            "author_email": "[email protected]",
            "created_at": "2024-08-03T11:06:23.950-07:00",
            "updated_at": "2024-08-04T23:31:58.735-07:00"
        },
        {
            "id": 392814,
            "comment": "Initial setup of Slack channels for onboarding new employees, including creating channels based on department and role",
            "version_no": 1,
            "author_name": "Alex",
            "author_email": "[email protected]",
            "created_at": "2024-08-03T11:06:23.950-07:00",
            "updated_at": "2024-08-03T11:06:23.950-07:00"
        }
    ]
}

# Get a specific recipe version

Retrieve detailed information about a specific recipe version.

GET /api/recipes/:recipe_id/versions/:id

# URL parameters

Name Type Description
recipe_id string
required
The ID of the recipe for which you plan to retrieve version details.
id string
required
The ID of the recipe version for which you plan to retrieve details.

# Sample request

curl  -X GET 'https://www.workato.com/api/recipes/12389/versions/397103' \
      -H 'Authorization: Bearer <api_token>'

# Responses

200 OK

If successful, the API returns a 200 OK status and a JSON response with the recipe version details:

{
    "data": [
        {
            "id": 397103,
            "comment": "Updated the recipe to include new Slack channels for onboarding new employees based on their roles",
            "version_no": 2,
            "author_name": "Alex",
            "author_email": "[email protected]",
            "created_at": "2024-08-04T23:31:58.735-07:00",
            "updated_at": "2024-08-04T23:31:58.735-07:00"
        }
    ]
}
404 NOT FOUND

The API returns a 404 Not Found error when you provide a non-existent or mismatched value, such as an incorrect recipe ID or version ID:

{
    "message": "Not found"
}

# Update a recipe version comment

Updates the comment on a specific recipe version. This endpoint modifies only the comment associated with the version, not the version itself.

PATCH/PUT /api/recipes/:recipe_id/versions/:id

# URL parameters

Name Type Description
recipe_id string
required
The ID of the recipe for which you plan to retrieve version details.
id string
required
The ID of the recipe version for which you plan to update the comment.

# Payload

Name Type Description
comment string
required
The new comment for the recipe version. Must be 255 characters or fewer.

# Sample request

curl  -X PATCH 'https://www.workato.com/api/recipes/12389/versions/397103' \
      -H 'Authorization: Bearer <api_token>' \
      -H 'Content-Type: application/json' \
      -d  '{
                "comment": "Refined the Slack channel setup for onboarding to ensure channels are created accurately based on employee roles and departments"
           }'

# Responses

200 OK

If successful, the API returns a 200 OK status and a JSON response with the updated recipe version details:

{
    "data": [
        {
            "id": 397103,
            "comment": "Refined the Slack channel setup for onboarding to ensure channels are created accurately based on employee roles and departments",
            "version_no": 2,
            "author_name": "Alex",
            "author_email": "[email protected]",
            "created_at": "2024-08-04T23:31:58.735-07:00",
            "updated_at": "2024-08-07T23:31:58.735-07:00"
        }
    ]
}
404 NOT FOUND

The API returns a 404 Not Found error when you provide a non-existent or mismatched value, such as an incorrect recipe ID or version ID:

{
    "message": "Not found"
}
422 UNPROCESSABLE ENTITY

The API returns a 422 Unprocessable Entity error in the following scenarios:

# Comment exceeds 255 characters

This error occurs when the recipe version comment exceeds 255 characters:

{
  "errors": [
        {
            "code": "validation_error",
            "title": "Comment is too long (maximum is 255 characters)",
            "detail": null
        }
    ]
}

# Missing comment

This error occurs when the recipe version comment is missing from the request payload:

{
  "errors": [
        {
            "code": "validation_error",
            "title": "Missing parameter comment",
            "detail": null
        }
    ]
}

# Get recipe health

This endpoint retrieves the most recent optimization report for a recipe. The report includes checks run by Performance Copilot, rule violations, and a total score.

This endpoint is limited to 60 requests per minute.

GET /api/recipes/:recipe_id/health

NO OPTIMIZATION DATA

You must run a scan using the recipe editor or the API to generate a performance report. If you don't run a scan, this endpoint returns null.

# URL parameters

Name Type Description
recipe_id integer
required
The ID of the recipe to retrieve performance data for.

# Sample request

curl  -X GET 'https://www.workato.com/api/recipes/12389/health' \
      -H 'Authorization: Bearer <api_token>'

# Response

This endpoint returns the latest performance report for the recipe. The report includes the following information:

  • A list of checks with associated rules
  • Rule violations with explanations and suggestions
  • A summary report with total score and impact breakdown

In the response, each rule includes a uuid that uniquely identifies it, and each violation has its own uuid to identify the specific instance. An empty violations array means no issues were found for that rule. A non-empty array indicates one or more violations.

{
    "data": {
        "checks": [
            {
                "rule": {
                    "uuid": "067e2484-fe30-76b3-8000-2434f39f5b38",
                    "title": "Redundant Logging",
                    "category": "cost",
                    "impact": "low",
                    "effort": "low",
                    "level": "single_step",
                    "is_copilot_reparable": false
                },
                "violations": []
            },
            {
                "rule": {
                    "uuid": "01960e61-71ec-77d1-bd0f-6cbe8c830a28",
                    "title": "Using deprecated trigger",
                    "category": "performance",
                    "impact": "high",
                    "effort": "medium",
                    "level": "single_step",
                    "is_copilot_reparable": false
                },
                "violations": []
            },
            {
                "rule": {
                    "uuid": "01963843-d38b-7563-b55e-743ab422f523",
                    "title": "Missing error handling",
                    "category": "quality",
                    "impact": "medium",
                    "effort": "low",
                    "level": "multi_step",
                    "is_copilot_reparable": false
                },
                "violations": []
            },
            {
                "rule": {
                    "uuid": "067e2486-e64b-704a-8000-dc8b1345d458",
                    "title": "Unused Variable Detection",
                    "category": "cost",
                    "impact": "low",
                    "effort": "low",
                    "level": "single_step",
                    "is_copilot_reparable": false
                },
                "violations": []
            },
            {
                "rule": {
                    "uuid": "067e247e-0feb-7e9c-8000-3ebb0e739bcb",
                    "title": "Error handling block with no actions",
                    "category": "quality",
                    "impact": "medium",
                    "effort": "low",
                    "level": "single_step",
                    "is_copilot_reparable": false
                },
                "violations": []
            },
            {
                "rule": {
                    "uuid": "067e2483-75cd-7df8-8000-f5d2b6b8c29c",
                    "title": "Recipe too long",
                    "category": "quality",
                    "impact": "medium",
                    "effort": "medium",
                    "level": "recipe",
                    "is_copilot_reparable": false
                },
                "violations": []
            },
            {
                "rule": {
                    "uuid": "067e2485-f748-7ecd-8000-f11fdbb50534",
                    "title": "Using deprecated action",
                    "category": "performance",
                    "impact": "high",
                    "effort": "medium",
                    "level": "single_step",
                    "is_copilot_reparable": false
                },
                "violations": []
            },
            {
                "rule": {
                    "uuid": "019623c4-ce85-7952-93c2-3236982732a7",
                    "title": "Missing recipe description",
                    "category": "quality",
                    "impact": "low",
                    "effort": "low",
                    "level": "recipe",
                    "is_copilot_reparable": false
                },
                "violations": [
                    {
                        "uuid": "572d474c-e775-488b-b4ac-339642bf6c5f",
                        "explanation": "Recipes without clear descriptions are difficult for team members to understand, maintain, and troubleshoot, creating knowledge silos and increasing support overhead.",
                        "suggestion": "Add a comprehensive description outlining the recipe's purpose, business context, dependencies, and any special considerations for future maintainers.",
                        "level": "recipe",
                        "locations": []
                    }
                ]
            },
            {
                "rule": {
                    "uuid": "067e2482-44d1-7697-8000-d7d3acaf92ab",
                    "title": "Inefficient job filtering",
                    "category": "performance",
                    "impact": "medium",
                    "effort": "low",
                    "level": "multi_step",
                    "is_copilot_reparable": false
                },
                "violations": []
            },
            {
                "rule": {
                    "uuid": "067e2465-6330-75c8-8000-90900aaf09c1",
                    "title": "Consecutive Variable Declaration",
                    "category": "cost",
                    "impact": "medium",
                    "effort": "low",
                    "level": "multi_step",
                    "is_copilot_reparable": false
                },
                "violations": []
            }
        ],
        "report": {
            "total_score": 95,
            "impact": {
                "low": {
                    "total": 3,
                    "broken_rules": 1,
                    "violations": 1,
                    "weight": 2
                },
                "medium": {
                    "total": 5,
                    "broken_rules": 0,
                    "violations": 0,
                    "weight": 5
                },
                "high": {
                    "total": 2,
                    "broken_rules": 0,
                    "violations": 0,
                    "weight": 8
                },
                "critical": {
                    "total": 0,
                    "broken_rules": 0,
                    "violations": 0,
                    "weight": 10
                }
            },
            "completed_at": "2025-04-25T15:42:55.279Z"
        },
        "version": 1
    }
}

# Start analyzing recipe health

This endpoint queues a recipe for analysis by Performance Copilot. Use this endpoint to request a new performance scan after making changes to the recipe.

This endpoint is limited to 20 requests per minute.

POST /api/recipes/:recipe_id/health

# URL parameters

Name Type Description
recipe_id integer
required
The ID of the recipe to scan for performance issues.

# Sample request

curl  -X POST 'https://www.workato.com/api/recipes/12389/health' \
      -H 'Authorization: Bearer <api_token>'

# Response

The response confirms that the recipe has been successfully queued for analysis.

{
    "status": "enqueued"
}

Use the Get recipe health endpoint to retrieve the performance report after analysis is complete.


Last updated: 5/29/2025, 6:15:34 PM