Create a Quick App through the API
Create, read, update, and delete Quick Apps with the DIAL Core applications API. This guide is for developers who automate app management, for example from CI/CD pipelines. It assumes you can call the DIAL Core API with an API key, and know the Quick App manifest.
Prerequisites
- A DIAL deployment with the Quick Apps Backend registered in DIAL Core. See DIAL Quick Apps.
- The DIAL Core URL, such as
https://dial.example.com. If DIAL Chat is athttps://chat.dial.example.com, DIAL Core is usually athttps://dial.example.com. Ask your administrator for the exact URL. - An API key for DIAL Core, in an environment variable:
export DIAL_API_KEY="<YOUR_DIAL_API_KEY>". - A model in your DIAL deployment that supports tool calls.
Create a Quick App
Applications you create are stored in your bucket. Look up its ID:
curl "https://dial.example.com/v1/bucket" -H "api-key: ${DIAL_API_KEY}"
# → {"bucket":"3CcedGxCx23EwiVbVmscVktScRyf46KypuBQ65miviST", ...}
export DIAL_BUCKET="3CcedGxCx23EwiVbVmscVktScRyf46KypuBQ65miviST"
Then save the app with PUT /v1/applications/{bucket}/{application-path}. The path is a name or folder path in the bucket: lowercase letters, numbers, hyphens, and /, such as research-assistant. The body is the application, with the manifest in applicationProperties:
curl -X PUT "https://dial.example.com/v1/applications/${DIAL_BUCKET}/weather-assistant" \
-H "Content-Type: application/json" \
-H "api-key: ${DIAL_API_KEY}" \
-d '{
"displayName": "Weather Assistant",
"description": "Looks up the current weather for any location.",
"applicationTypeSchemaId": "https://mydial.epam.com/custom_application_schemas/quickapps2",
"applicationProperties": {
"orchestrator": {
"deployment": { "deployment_id": "<MODEL_ID>", "parameters": { "temperature": 0.3 } },
"system_prompt": {
"type": "custom",
"variables": {},
"content": "You are a weather assistant. Use get_weather to look up current conditions. State the location and temperature."
}
},
"contexts": [],
"tool_sets": [
{
"type": "rest-api",
"name": "weather",
"tools": [
{
"type": "restapi-tool",
"rest_api_method_info": { "method_url": "https://api.open-meteo.com/v1/forecast", "method_type": "get" },
"open_ai_tool": {
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather at a latitude and longitude.",
"parameters": {
"type": "object",
"properties": {
"latitude": { "type": "number", "description": "The latitude.", "parameter_info": { "type": "query", "key": "latitude" } },
"longitude": { "type": "number", "description": "The longitude.", "parameter_info": { "type": "query", "key": "longitude" } },
"current": { "type": null, "const": "temperature_2m,wind_speed_10m", "parameter_info": { "type": "query", "key": "current" } }
},
"required": ["latitude", "longitude", "current"]
}
}
}
}
]
}
],
"conversation_starters": {
"starters": [{ "title": "London weather", "text": "What is the weather in London?" }]
}
}
}'
The response returns the saved application. For other manifests, such as MCP servers, DIAL models as tools, or skills and hooks, start from the manifest examples.
Read a Quick App
curl "https://dial.example.com/v1/applications/${DIAL_BUCKET}/weather-assistant" \
-H "api-key: ${DIAL_API_KEY}"
To list every application you can use, call GET /openai/applications.
Update a Quick App
Send the whole application again with PUT to the same path. The request replaces the application; it doesn't merge fields. To change one field, read the application, change the field, and send it all back.
Delete a Quick App
curl -X DELETE "https://dial.example.com/v1/applications/${DIAL_BUCKET}/weather-assistant" \
-H "api-key: ${DIAL_API_KEY}"
Common errors
| Status | Cause | Fix |
|---|---|---|
400 | The manifest doesn't match the schema | Check it against the manifest reference. Common causes are a missing orchestrator, contexts, or tool_sets, and an unknown type. |
401 | A missing or invalid API key | Check the api-key header |
404 | No application at the path | Check the bucket and the path |
Errors the app reports while it runs are covered in Errors.
Further reading
- Quick App manifest — every field of
applicationProperties - Quick App manifest examples — complete manifests for common Quick App patterns
- Quick Apps errors — what users see on failures and where to find the causes
- Tutorial: build an agent with a Toolset — the same kind of agent, built in DIAL Chat
- DIAL Quick Apps — the two services behind Quick Apps and how they fit together
- DIAL Core API reference — the applications API