Create a Forward template baseline for future sessions.
Request headers
|
Header |
Required |
Description |
|
|
Yes |
|
|
|
Yes |
|
|
|
No |
Optional idempotency key for state-changing requests. |
Request body
|
Parameter |
Type |
Required |
Description |
|
|
string |
Yes |
Template name. Must be 1-256 characters and unique within the account. |
|
|
string |
Yes |
Model identifier, such as |
|
|
string |
Yes |
Default environment applied to sessions created from this template. |
|
|
string |
No |
Template description. Up to 2,048 characters. |
|
|
string |
No |
System prompt. Up to 100,000 characters. |
|
|
array |
No |
Tool configurations. Up to 128 items. |
|
|
array |
No |
MCP server configurations. Up to 20 items. |
|
|
array |
No |
Skill bindings. Up to 20 items. |
|
|
object |
No |
Managed Agents configuration. |
|
|
array |
No |
Default vault IDs applied to sessions. |
|
|
object |
No |
Default file resources, keyed by file ID. |
|
|
object|string |
No |
Default environment variables for sessions. |
|
|
object |
No |
Custom metadata. |
Nested configuration objects
Files
files is a map keyed by file ID. Do not include file_id, id, or resource_id inside each entry. Forward injects mount_path automatically when a session starts.
|
Field |
Type |
Required |
Description |
|
|
boolean |
No |
Omitting the field is equivalent to |
tools[] items
Each entry in tools selects a shape based on type.
|
Field |
Type |
Applies to |
Description |
|
|
string |
All |
Required. One of |
|
|
array |
|
Convenience allowlist. A non-empty array enables only the listed built-in tools. |
|
|
array |
|
Convenience denylist. Compiled into disabled tool configs. |
|
|
array |
|
Per-tool enable state and permission policy. |
|
|
string |
|
Required. Must match one of the |
|
|
string |
|
Required. Custom tool name; must not collide with a built-in tool name. |
|
|
string |
|
Required. Human-readable description of the custom tool. |
|
|
object |
|
Required JSON Schema. |
Built-in tool names include Bash, Read, Write, Edit, Glob, Grep, WebFetch, WebSearch, and DeliverArtifacts.
Tool config
Each entry in tools[].configs uses the following shape.
|
Field |
Type |
Required |
Description |
|
|
string |
Yes |
Tool name. Use the built-in tool name for a built-in toolset, or the MCP tool name for an MCP toolset. |
|
|
boolean |
No |
|
|
|
object |
No |
Runtime permission behavior. |
Permission policy
|
Field |
Type |
Required |
Description |
|
|
string |
Yes |
One of |
MCP servers
|
Field |
Type |
Required |
Description |
|
|
string |
No |
Only |
|
|
string |
Yes |
MCP server name, unique within the template. Referenced by |
|
|
string |
Yes |
Streamable HTTP MCP endpoint URL. |
skills[] items
|
Field |
Type |
Required |
Description |
|
|
string |
Yes |
Either |
|
|
string |
Yes |
Skill ID. |
|
|
string |
No |
Skill version. Falls back to the latest version when omitted. |
|
|
boolean |
No |
Omitting the field is equivalent to |
Example request
curl -s -X POST 'https://api.qoder.com.cn/api/v1/forward/templates' \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{
"name": "Support assistant",
"description": "Handles pre-sales and after-sales support",
"model": "ultimate",
"system": "You are a helpful support assistant.",
"tools": [
{
"type": "agent_toolset_20260401",
"configs": [
{ "name": "Read", "enabled": true },
{ "name": "Grep", "enabled": true },
{ "name": "WebSearch", "enabled": true }
]
}
],
"mcp_servers": [],
"skills": [
{
"type": "custom",
"skill_id": "skill_customer_reply",
"version": "1",
"enabled": true
}
],
"environment_id": "env_support",
"vault_ids": ["vault_crm"],
"files": {
"file_019eXXXX": { "enabled": true }
},
"environment_variables": {
"BASE_MODE": "support"
},
"metadata": {}
}'
Example response
HTTP 201 Created
{
"type": "template",
"id": "tmpl_support",
"name": "Support assistant",
"description": "Handles pre-sales and after-sales support",
"status": "active",
"model": "ultimate",
"system": "You are a helpful support assistant.",
"tools": [
{
"type": "agent_toolset_20260401",
"configs": [
{ "name": "Read", "enabled": true },
{ "name": "Grep", "enabled": true },
{ "name": "WebSearch", "enabled": true }
]
}
],
"mcp_servers": [],
"skills": [
{
"type": "custom",
"skill_id": "skill_customer_reply",
"version": "1",
"enabled": true
}
],
"multiagent": null,
"environment_id": "env_support",
"vault_ids": ["vault_crm"],
"files": {
"file_019eXXXX": { "enabled": true }
},
"environment_variables": {
"BASE_MODE": "support"
},
"metadata": {},
"created_at": "2026-06-18T10:00:00Z",
"updated_at": "2026-06-18T10:00:00Z"
}
Response fields
|
Field |
Type |
Description |
|
|
string |
Always |
|
|
string |
Template ID. |
|
|
string |
|
|
|
string |
Default environment ID applied to sessions. |
|
|
array |
Default vault IDs. |
|
|
object |
Default file resource configuration keyed by file ID. |
|
|
string |
Creation timestamp. |
|
|
string |
Last update timestamp. |
Errors
|
HTTP |
Type |
Trigger |
|
400 |
|
Request body or field value is invalid. |
|
401 |
|
PAT is invalid or has expired. |
|
404 |
|
A referenced environment, skill, vault, or file does not exist. |
|
409 |
|
A template with the same name already exists. |
Notes
-
Do not send a template ID in the create request. Forward generates the
idfor you. -
filesis keyed by file ID. Do not includefile_id,id, orresource_idinside each entry. -
Forward injects file mount paths automatically when a session starts.