Cortex Agents REST API¶
Use this API to simplify the creation of an interactive chat application.
Run agent¶
POST <account_url>/api/v2/cortex/agent:run
Sends a user query to the Cortex Agents service provided in the request body and then generates a response.
Request¶
Path parameters¶
Parameter |
Description |
---|---|
|
(Required) Your Snowflake Account URL. For instructions on finding your account URL, see Finding the organization and account name for an account. |
Request headers¶
Header |
Description |
---|---|
|
(Required) Authorization token. For more information, see Configure Key-Pair Authentication. |
|
(Required) application/json |
Request body¶
The request body contains the model, response instruction, experimental fields, tools, tool resources, and messages.
Field |
Type |
Description |
---|---|---|
|
string |
The name of the model used by the Agent to generate a response. For a list of supported models, see Supported models. |
|
string |
The instructions the model follows when it generates the response. |
|
object |
Experimental flags passed to the agent. |
|
array |
An array of tool specifications available to the agent. |
|
object |
Resources required by the tools. |
|
object |
The configuration used to select the tool. |
|
array |
Array of messages in the conversation. |
Tools configuration¶
Tool specifications¶
The tools
field contains an array of available tools:
Field |
Type |
Description |
---|---|---|
|
string |
The type of tool. A combination of type and name is a unique identifier. |
|
string |
The name of the tool. A combination of type and name is a unique identifier. |
Tool resources¶
The tool_resources
field is an object that maps tool names to their configuration objects:
tool_resources: {
"toolName1": {configuration object for toolName1},
"toolName2": {configuration object for toolName2},
...
}
Tool choice¶
The tool_choice
field configures tool selection behavior:
Field |
Type |
Description |
---|---|---|
|
string |
How tools should be selected. Valid values:
|
|
array |
Optional array of tool names to use. Only valid when |
Messages¶
The messages
array contains the conversation history:
Field |
Type |
Description |
---|---|---|
|
string |
The role of the message sender. Values: “system”, “user”, “assistant”. |
|
string |
The content type. Values: “text”, “tool_use”, “tool_results”. |
|
string |
The text content. Only for type = “text”. |
|
object |
The tool use specification. Only for type = “tool_use”. |
|
string |
Unique identifier for the tool use. |
|
string |
Name of the tool to use. |
|
object |
Input parameters for the tool. |
|
object |
The tool results. Only for type = “tool_results”. |
|
string |
References the tool_use_id that generated these results. |
|
string |
Tool execution status. Values: “success”, “error”. |
|
array |
Array of result content objects. |
Response¶
When streaming, each event typically arrives in a Server-Sent Events (SSE) format, with the following primary patterns:
Incremental
message.delta
events for partial outputerror
events if something goes wrong.
message.delta
Event¶
Field |
Type |
Description |
---|---|---|
|
string |
|
|
object |
Contains incremental update data. |
|
string |
Unique identifier for the message. |
|
string |
|
|
array |
A list of chunks or partial message segments. |
|
integer |
The position of this chunk within the current message. |
|
string |
Content type. Valid values:
- |
|
string |
If |
|
object |
If |
|
string |
The unique identifier for the tool call. |
|
string |
The name of the tool being called. |
|
object |
JSON payload for the tool. |
|
object |
If |
|
string |
The unique identifier for the tool output. |
|
string |
The tool execution status. Valid values:
|
|
array |
A list of items describing the tool’s returned data. |
|
string |
The type of content returned by the tool. Valid values:
|
|
object |
If |
|
string |
If |
error Event¶
Field |
Type |
Description |
---|---|---|
|
string |
|
|
object |
Contains error details. |
|
string |
The Snowflake error code. For example, |
data.message |
string |
A description of what went wrong. For example, |
Sample request¶
{
"model": "llama3.3-70b",
"response_instruction": "You will always maintain a friendly tone and provide concise response",
"experimental": {},
"tools": [
{
"tool_spec": {
"type": "cortex_analyst_text_to_sql",
"name": "Analyst1"
}
},
{
"tool_spec": {
"type": "cortex_analyst_text_to_sql",
"name": "Analyst2"
}
},
{
"tool_spec": {
"type": "cortex_analyst_sql_exec",
"name": "SQL_exec1"
}
},
{
"tool_spec": {
"type": "cortex_search",
"name": "Search1"
}
}
],
"tool_resources": {
"Analyst1": { "semantic_model_file": "stage1"},
"Analyst2": { "semantic_model_file": "stage2"},
"Search1": {
"name": "db.schema.service_name",
"filter": {"@eq": {"region": "North America"} }
}
},
"tool_choice": {
"type": "auto"
},
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What are the top three customers by revenue?"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "<thinking> ... here <..>"
},
{
"type": "tool_use",
"tool_use": {
"tool_use_id": "tool_001",
"name": "get_stock_price",
"input": {
"semantic_model_file": "semantic_model_1",
"user_query": "What are the top three customers by revenue?"
}
}
},
{
"type": "tool_results",
"tool_results": {
"status": "success",
"tool_use_id": "tool_001",
"content": [
{"type": "json", "json": {"sql": "select * from table"}},
{"type": "text", "text": "15 degrees"}
]
}
},
{
"type": "tool_use",
"tool_use": {
"tool_use_id": "tool_002",
"name": "SQL_exec1",
"input": {
"sql": "select * from table"
}
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_results": {
"tool_use_id": "tool_002",
"result": {
"query_id": "kjlasdfasdfh234a"
}
}
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Top 3 customers by revenue are Acme, ..."
}
]
}
]
}
Sample response¶
{
"id": "msg_001",
"object": "message.delta",
"delta": {
"content": [
{
"index": 0,
"type": "tool_use",
"tool_use": {
"tool_use_id": "toolu_XXXXXX",
"name": "analyst1",
"input": {
"messages": [
"role:USER content:{text:{text:\"count book id\"}}"
],
"model": "snowflake-hosted-semantic",
"experimental": ""
}
}
},
{
"index": 0,
"type": "tool_results",
"tool_results": {
"tool_use_id": "toolu_XXXXXX",
"content": [
{
"type": "json",
"json": {
"suggestions": [],
"sql": "WITH __books AS (\n SELECT\n book_id\n FROM user_database.user_schema.user_table\n)\nSELECT\n COUNT(book_id) AS book_count\nFROM __books\n -- Generated by Cortex Analyst\n;",
"text": "This is our interpretation of your question:\n\n__Count the total number of books__ \n\n"
}
}
],
"status": "success"
}
}
]
}
}