Agent Studio
The Agent Studio APIs allow you to programmatically create and manage Agent Studio assets, such as genies, knowledge bases, and skills.
Rate limits
Agent Studio resources have the following rate limits:
Quick reference
| Type | Resource | Description |
|---|---|---|
| GET | /api/agentic/genies | Returns a list of genies. |
| POST | /api/agentic/genies | Creates a new genie. |
| PUT | /api/agentic/genies/:id | Updates an existing genie. |
| GET | /api/agentic/genies/:id | Returns the genie associated with the ID you specify. |
| DELETE | /api/agentic/genies/:id | Deletes a genie. |
| POST | /api/agentic/genies/:id/start | Starts the genie associated with the ID you specify. |
| POST | /api/agentic/genies/:id/stop | Stops the genie associated with the ID you specify. |
| POST | /api/agentic/genies/:id/assign_skills | Assigns skills to the genie associated with the ID you specify. |
| POST | /api/agentic/genies/:id/remove_skills | Removes skills from the genie associated with the ID you specify. |
| POST | /api/agentic/genies/:id/assign_knowledge_bases | Assigns knowledge bases to the genie associated with the ID you specify. |
| POST | /api/agentic/genies/:id/remove_knowledge_bases | Removes knowledge bases from the genie associated with the ID you specify. |
| POST | /api/agentic/genies/:id/assign_user_groups | Assigns user group access to the genie associated with the ID you specify. |
| POST | /api/agentic/genies/:id/remove_user_groups | Removes user group access from the genie associated with the ID you specify. |
| GET | /api/agentic/knowledge_bases | Returns a list of knowledge bases. |
| POST | /api/agentic/knowledge_bases | Creates a new knowledge base. |
| GET | /api/agentic/knowledge_bases/:id | Returns the knowledge base associated with the ID you specify. |
| PUT | /api/agentic/knowledge_bases/:id | Updates an existing knowledge base. |
| DELETE | /api/agentic/knowledge_bases/:id | Deletes a knowledge base. |
| GET | /api/agentic/knowledge_bases/:id/data_sources | Returns the data sources associated with the knowledge base ID you specify. |
| GET | /api/agentic/knowledge_bases/:id/recipes | Returns the recipes associated with the knowledge base ID you specify. |
| GET | /api/agentic/skills | Returns a list of skills. |
| POST | /api/agentic/skills | Creates a new skill. |
| GET | /api/agentic/skills/:id | Returns the skill associated with the ID you specify. |
Genies
List genies
Returns a list of genies.
GET /api/agentic/geniesQuery parameters
| Name | Type | Description |
|---|---|---|
| folder_id | string optional | The ID of the folder where the genie resides. |
| project_id | string optional | The ID of the project where the genie resides. |
| state | string optional | The state of the genie. For example: active or inactive. |
| page | integer optional | Page number of the genies to fetch. Minimum value is 1. |
| per_page | integer optional | Number of genies to return in a single page. Minimum value is 1. Maximum value is 50. |
Sample request
curl -X GET "https://www.workato.com/api/agentic/genies?per_page=10&page=1" \
-H 'Authorization: Bearer <api_token>'Sample response
[
{
"id": "gni-BWLSPX4z-BaT3D9",
"name": "Customer Support Genie",
"description": "Handles customer support inquiries and provides quick responses.",
"state": "stopped",
"folder_id": 22991030,
"instructions": "You are a helpful, friendly support agent who answers customer questions clearly and politely.",
"ai_provider": "open_ai",
"chat_interface": "slack",
"skills_count": 5,
"knowledge_bases_count": 3,
"user_groups_count": 0,
"active_recipes_count": 0,
"inactive_skills_count": 5,
"logo_url": "https://example.com/logo.png",
"created_at": "2025-07-15T11:07:34.060-07:00",
"updated_at": "2026-02-24T08:38:29.099-08:00"
},
{
"id": "gni-ZWSMPR4a-TaG7S9",
"name": "Customer Support Genie v2",
"description": "Updated to handle billing inquiries in addition to general support.",
"state": "stopped",
"folder_id": 21285720,
"instructions": "You are a knowledgeable, polite support assistant. Always prioritize clear, concise answers.",
"ai_provider": "open_ai",
"chat_interface": "slack",
"skills_count": 5,
"knowledge_bases_count": 3,
"user_groups_count": 0,
"active_recipes_count": 0,
"inactive_skills_count": 5,
"logo_url": "https://example.com/logo.png",
"created_at": "2026-02-24T08:54:34.585-08:00",
"updated_at": "2026-02-25T09:34:14.013-08:00"
}
]Create a genie
Creates a new genie.
POST /api/agentic/geniesPayload
| Name | Type | Description |
|---|---|---|
| name | string required | The name of the genie. |
| description | string required | A description of the genie's purpose. |
| folder_id | string required | The ID of the folder where the genie resides. |
| instructions | string required | The instructions your genie uses to identify its purpose, personality, and job description. |
| ai_provider | string required | The AI provider that powers your genie. Accepted values are anthropic or open_ai. |
| shared_account_id | integer required | The Connection ID of your genie. |
| custom_oauth_key_id | integer required | Custom OAuth key ID. |
| matrix | boolean required | Determines whether Workato GO is enabled as your chat interface or not. Accepted values are true or false. |
Sample request
curl -X POST https://www.workato.com/api/agentic/genies \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"name": "Customer Support Genie",
"description": "Handles customer support inquiries and provides quick responses.",
"folder_id": "7498",
"instructions": "You are a helpful, friendly support agent who answers customer questions clearly and politely.",
"ai_provider": "open_ai",
"shared_account_id": 1234,
"custom_oauth_key_id": 5678,
"matrix": true
}'Sample response
{
"id": ngi-BWLSPX4z-BaT3D9/,
}Update a genie
Updates an existing genie.
PUT /api/agentic/genies/:idQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the genie you plan to update. |
| name | string optional | The name of the genie. |
| description | string optional | A description of the genie's purpose. |
| folder_id | string optional | The ID of the folder where the genie resides. |
| instructions | string optional | The instructions your genie uses to identify its purpose, personality, and job description. |
| ai_provider | string optional | The AI provider that powers your genie. Accepted values are anthropic or open_ai. |
| shared_account_id | integer optional | The Connection ID of your genie. |
| custom_oauth_key_id | integer optional | Custom OAuth key ID. |
| matrix | boolean optional | Determines whether Workato GO is enabled as your chat interface or not. Accepted values are true or false. |
Sample request
curl -X PUT https://www.workato.com/api/agentic/genies/101 \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"name": "Customer Support Genie v2",
"description": "Updated to handle billing inquiries in addition to general support.",
"instructions": "You are a knowledgeable, polite support assistant. Always prioritize clear, concise answers.",
"matrix": false
}'Sample response
{
"id": "gni-ZWSMPR4a-TaG7S9",
"name": "Customer Support Genie v2",
"description": "Updated to handle billing inquiries in addition to general support.",
"folder_id": "7498",
"project_id": "4567",
"instructions": "You are a knowledgeable, polite support assistant. Always prioritize clear, concise answers.",
"ai_provider": "open_ai",
"shared_account_id": 1234,
"custom_oauth_key_id": 5678,
"matrix": false
}Get a genie by ID
Returns the genie associated with the ID you specify.
GET /api/agentic/genies/:idQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the genie you plan to retrieve. |
Sample request
curl -X GET https://www.workato.com/api/agentic/genies/gni-ZWSMPR4a-TaG7S9 \
-H 'Authorization: Bearer <api_token>'Sample response
{
"id": "gni-ZWSMPR4a-TaG7S9",
"name": "Customer Support Genie v2",
"description": "Updated to handle billing inquiries in addition to general support.",
"state": "stopped",
"folder_id": 21285720,
"project_id": 93761783,
"instructions": "You are a knowledgeable, polite support assistant. Always prioritize clear, concise answers.",
"ai_provider": "open_ai",
"chat_interface": "slack",
"skills_count": 5,
"knowledge_bases_count": 3,
"user_groups_count": 0,
"active_recipes_count": 0,
"inactive_skills_count": 5,
"custom_oauth_key_id": 5678,
"connection_id": null,
"folders": [
{
"id": 21285720,
"name": "Customer Assistants"
}
],
"logo_url": "https://example.com/logo.png",
"user_groups": [],
"created_at": "2026-02-24T08:54:34.170-08:00",
"updated_at": "2026-02-25T09:34:14.300-08:00"
}Delete a genie
Deletes a genie.
DELETE /api/agentic/genies/:idQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the genie you plan to delete. |
Sample request
curl -X DELETE https://www.workato.com/api/agentic/genies/gni-ZWSMPR4a-TaG7S9 \
-H 'Authorization: Bearer <api_token>'Sample response
{
"success": "true"
}Start a genie
Starts the genie associated with the ID you specify.
POST /api/agentic/genies/:id/startQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the genie you plan to start. |
Sample request
curl -X POST https://www.workato.com/api/agentic/genies/gni-ZWSMPR4a-TaG7S9/start \
-H 'Authorization: Bearer <api_token>'Sample response
{
"success": true
}Stop a genie
Stops the genie associated with the ID you specify.
POST /api/agentic/genies/:id/stopQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the genie you plan to stop. |
Sample request
curl -X POST https://www.workato.com/api/agentic/genies/gni-ZWSMPR4a-TaG7S9/stop \
-H 'Authorization: Bearer <api_token>'Sample response
{
"success": true
}Assign a skill to a genie
Assigns skills to the genie associated with the ID you specify.
POST /api/agentic/genies/:id/assign_skillsQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the genie you to which you plan to assign skills. |
Payload
| Name | Type | Description |
|---|---|---|
| skill_ids | array of string required | An array of skill IDs to assign to a genie. |
Sample request
curl -X POST https://www.workato.com/api/agentic/genies/gni-ZWSMPR4a-TaG7S9/assign_skills \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"skill_ids": ["65001201", "65704499", "65039789"]
}'Sample response
{
"skills": [
{
"id": "65001201",
"name": "Sales Lead"
},
{
"id": "65704499",
"name": "Ticket Escalation"
},
{
"id": "65039789",
"name": "Order Tracking"
}
],
}Remove a skill from a genie
Removes a skill from the genie associated with the ID you specify.
POST /api/agentic/genies/:id/remove_skillsQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the genie you from which you plan to remove skills. |
Payload
| Name | Type | Description |
|---|---|---|
| skill_ids | array of string required | An array of skill IDs to remove from a genie. |
Sample request
curl -X POST https://www.workato.com/api/agentic/genies/gni-ZWSMPR4a-TaG7S9/assign_skills \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"skill_ids": ["65001201", "65704499"]
}'Sample response
{
"skills": [
{
"id": "65001201",
"name": "Sales Lead"
},
{
"id": "65704499",
"name": "Ticket Escalation"
}
],
}Assign a knowledge base to a genie
Assigns knowledge bases to the genie associated with the ID you specify.
POST /api/agentic/genies/:id/assign_knowledge_basesQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the genie you to which you plan to assign knowledge bases. |
Payload
| Name | Type | Description |
|---|---|---|
| knowledge_base_ids | array of string required | An array of knowledge base IDs to assign to a genie. |
Sample request
curl -X POST https://www.workato.com/api/agentic/genies/gni-ZWSMPR4a-TaG7S9/assign_knowledge_bases \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"knowledge_base_ids": ["kb-WSm8kore-blMxrh", "kb-ATx0crok-saMvba"]
}'Sample response
{
"knowledge_bases": [
{
"id": "kb-WSm8kore-blMxrh",
"name": "Sync Jira"
},
{
"id": "kb-ATx0crok-saMvba",
"name": "PRD sync"
}
],
}Remove a knowledge base from a genie
Removes a knowledge base from the genie associated with the ID you specify.
POST /api/agentic/genies/:id/remove_knowledge_basesQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the genie you from which you plan to remove knowledge bases. |
Payload
| Name | Type | Description |
|---|---|---|
| knowledge_base_ids | array of string required | An array of knowledge base IDs to remove from a genie. |
Sample request
curl -X POST https://www.workato.com/api/agentic/genies/gni-ZWSMPR4a-TaG7S9/remove_knowledge_bases \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"knowledge_base_ids": ["kb-WSm8kore-blMxrh"]
}'Sample response
{
"knowledge_bases": [
{
"id": "kb-WSm8kore-blMxrh",
"name": "Sync Jira"
}
],
}Assign a user group to a genie
Assigns user group access to the genie associated with the ID you specify.
POST /api/agentic/genies/:id/assign_user_groupsQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the genie you to which you plan to assign user group access. |
Payload
| Name | Type | Description |
|---|---|---|
| user_group_ids | array of string required | An array of user group IDs to add to a genie. |
Sample request
curl -X POST https://www.workato.com/api/agentic/genies/gni-ZWSMPR4a-TaG7S9/assign_user_groups \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"user_group_ids": ["ertXU2Z3sQaL47T8PssX2V, gpzHU1Y3mJaG77W1JbbZ2B"]
}'Sample response
{
"user_groups": [
{
"id": "ertXU2Z3sQaL47T8PssX2V",
"name": "Sales"
},
{
"id": "gpzHU1Y3mJaG77W1JbbZ2B",
"name": "Finance"
},
],
}Remove a user group from a genie
Removes user group access from the genie associated with the ID you specify.
POST /api/agentic/genies/:id/remove_user_groupsQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the genie you from which you plan to remove user group access. |
Payload
| Name | Type | Description |
|---|---|---|
| user_group_ids | array of string required | An array of user group IDs to remove from a genie. |
Sample request
curl -X POST https://www.workato.com/api/agentic/genies/gni-ZWSMPR4a-TaG7S9/remove_user_groups \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"user_group_ids": ["ertXU2Z3sQaL47T8PssX2V"]
}'Sample response
{
"user_groups": [
{
"id": "ertXU2Z3sQaL47T8PssX2V",
"name": "Sales"
}
],
}Knowledge bases
List knowledge bases
Returns a list of knowledge bases.
GET /api/agentic/knowledge_basesQuery parameters
| Name | Type | Description |
|---|---|---|
| folder_id | string optional | The ID of the folder where the genie resides. |
| project_id | string optional | The ID of the project where the genie resides. |
| query | string optional | Search query. |
| page | integer optional | Page number of the genies to fetch. Minimum value is 1. |
| per_page | integer optional | Number of genies to return in a single page. Minimum value is 1. Maximum value is 50. |
| sort_term | string optional | The field or term to sort results by. For example: name or latest_activity. |
Sample request
curl -X GET https://www.workato.com/api/agentic/knowledge_bases \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"per_page": 10,
"page": 1,
"sort_term": "name"
}'Sample response
[
{
"id": "kb-WSm8kore-blMxrh",
"name": "Support FAQs",
"description": "Knowledge base with frequently asked customer support questions.",
"folder_id": "7498",
"project_id": "4567"
},
{
"id": "kb-BLm8cove-brMxrh",
"name": "Sales Playbook",
"description": "Guidelines and resources for the sales team.",
"folder_id": "7302",
"project_id": "9876"
}
]Create a knowledge base
Creates a new knowledge base.
POST /api/agentic/knowledge_basesPayload
| Name | Type | Description |
|---|---|---|
| name | string required | The name of the knowledge base. |
| description | string required | A description of the knowledge base. |
| folder_id | string required | The ID of the folder where the knowledge base resides. |
| source_type | string required | The source of the knowledge base, such as a recipe. |
| data_sources | string required | Configure data sources for the knowledge base. |
Sample request
curl -X POST https://www.workato.com/api/agentic/knowledge_bases \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"name": "Support FAQs",
"description": "Knowledge base with frequently asked customer support questions.",
"folder_id": "7498",
"source_type": "recipe",
"data_sources": "zendesk_articles"
}'Sample response
{
"id": "kb-BRm8coke-rhMxsa",
"name": "Support FAQs",
"description": "Knowledge base with frequently asked customer support questions.",
"folder_id": "7498",
"source_type": "recipe",
"data_sources": "zendesk_articles"Get a knowledge base by ID
Returns the knowledge base associated with the ID you specify.
GET /api/agentic/knowledge_bases/:idQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the knowledge base you plan to retrieve. |
Sample request
curl -X GET https://www.workato.com/api/agentic/knowledge_bases/kb-WSm8kore-blMxrh \
-H 'Authorization: Bearer <api_token>' \Sample response
[
{
"id": "kb-WSm8kore-blMxrh",
"name": "Support FAQs",
"description": "Knowledge base with frequently asked customer support questions.",
"folder_id": "7498",
"project_id": "4567"
}
]Update a knowledge base
Updates an existing knowledge base.
PUT /api/agentic/knowledge_bases/:idQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the knowledge base you plan to update. |
| name | string optional | The name of the knowledge base. |
| description | string optional | The description of the knowledge base. |
| folder_id | string optional | The ID of the folder where the knowledge base resides. |
| data_sources | object optional | The configured data sources for the knowledge base. |
Sample request
curl -X PUT https://www.workato.com/api/agentic/knowledge_bases/kb-WSm8kore-blMxrh \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"name": "Support FAQs v2",
"description": "Updated to include billing FAQs in addition to support.",
"data_sources": {
"zendesk_articles": true,
"internal_docs": true
}
}'Sample response
{
"id": "kb-WSm8kore-blMxrh",
"name": "Support FAQs v2",
"description": "Updated to include billing FAQs in addition to support.",
"folder_id": "7498",
"source_type": "recipe",
"data_sources": {
"zendesk_articles": true,
"internal_docs": true
}
}Delete a knowledge base
Deletes a knowledge base.
DELETE /api/agentic/knowledge_bases/:idQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the knowledge base you plan to delete. |
Sample request
curl -X DELETE https://www.workato.com/api/agentic/knowledge_bases/kb-WSm8kore-blMxrh \
-H 'Authorization: Bearer <api_token>' \Sample response
{
"success": "true"
}Get knowledge base data sources
Returns the data sources associated with the knowledge base ID you specify.
GET /api/agentic/knowledge_bases/:id/data_sourcesQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the knowledge base for which you plan to retrieve data sources. |
Sample request
curl -X GET https://www.workato.com/api/agentic/knowledge_bases/kb-WSm8kore-blMxrh/data_sources \
-H 'Authorization: Bearer <api_token>'Sample response
{
"knowledge_base_id": "kb-WSm8kore-blMxrh",
"data_sources": {
"zendesk_articles": true,
"internal_docs": true,
"slack_channels": false
}
}Get knowledge base recipes
Returns the recipes associated with the knowledge base ID you specify.
GET /api/agentic/knowledge_bases/:id/recipesQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the knowledge base for which you plan to retrieve associated recipes. |
| query | string optional | Search query. |
| page | integer optional | Page number of the genies to fetch. Minimum value is 1. |
| per_page | integer optional | Number of genies to return in a single page. Minimum value is 1. Maximum value is 50. |
| sort_term | string optional | The field or term to sort results by. For example: name or latest_activity. |
Sample request
curl -X GET https://www.workato.com/api/agentic/knowledge_bases/kb-WSm8kore-blMxr/recipes \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"per_page": 10,
"page": 1,
"sort_term": "name"
}'Sample response
[
{
"id": 45246391,
"name": "Customer Support Escalation",
"description": "Routes high-priority Zendesk tickets to Slack.",
"knowledge_base_id": "kb-WSm8kore-blMxr/recipes"
},
{
"id": 87654321,
"name": "Billing Notifications",
"description": "Sends alerts for overdue invoices to the finance team.",
"knowledge_base_id": "kb-WSm8kore-blMxr/recipes"
}
]Skills
List skills
Returns a list of skills.
GET /api/agentic/skillsQuery parameters
| Name | Type | Description |
|---|---|---|
| folder_id | string optional | The ID of the folder where the genie resides. |
| project_id | string optional | The ID of the project where the genie resides. |
| query | string optional | Search query. |
| page | integer optional | Page number of the genies to fetch. Minimum value is 1. |
| per_page | integer optional | Number of genies to return in a single page. Minimum value is 1. Maximum value is 50. |
| sort_term | string optional | The field or term to sort results by. For example: name or latest_activity. |
Sample request
curl -X GET https://www.workato.com/api/agentic/skills \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"per_page": 10,
"page": 1,
"sort_term": "name"
}'Sample response
[
{
"id": 65001201,
"name": "Zendesk Ticket Management",
"description": "Skill for handling customer support tickets from Zendesk.",
"folder_id": "7498",
"project_id": "4567"
},
{
"id": 65039789,
"name": "Slack Notifications",
"description": "Skill for sending targeted Slack alerts.",
"folder_id": "7302",
"project_id": "4567"
}
]Create a skill from an existing recipe
Converts an existing recipe into a skill. The recipe must use a Genie trigger with defined inputs and actions. Call this endpoint with the recipe_id to register the recipe as a skill in Agent Studio.
POST /api/agentic/skillsPayload
| Name | Type | Description |
|---|---|---|
| recipe_id | integer required | The ID of the recipe to convert into a skill. |
Sample request
curl -X POST https://www.workato.com/api/agentic/skills \
-H 'Authorization: Bearer <api_token>' \
-H 'Content-Type: application/json' \
-d '{
"recipe_id": 65039789
}'Sample response
{
"name": "Customer Escalation Skill",
"description": "Skill automatically routes high-priority Zendesk tickets to Slack.",
"recipe_id": 65039789,
"folder_id": "7498",
"project_id": "4567"
}Get a skill by ID
Returns the skill associated with the ID you specify.
GET /api/agentic/skills/:idQuery parameters
| Name | Type | Description |
|---|---|---|
| id | string required | The ID of the skill for you plan to retrieve. |
Sample request
curl -X GET https://www.workato.com/api/agentic/skills/65039789 \
-H 'Authorization: Bearer <api_token>' \Sample response
{
"name": "Customer Escalation Skill",
"description": "Skill automatically routes high-priority Zendesk tickets to Slack.",
"recipe_id": 65039789,
"folder_id": "7498",
"project_id": "4567"
}Last updated: