> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usefini.com/llms.txt
> Use this file to discover all available pages before exploring further.
# Update prompts
> Save a new prompt version for one agent.
Saves a new prompt version for one agent and returns the stored version.
<Note>
This route creates a new saved prompt version. It does not patch a prompt in place.
</Note>
## Headers
<ParamField header="Authorization" type="string" required>
Bearer token containing your Fini workspace API key. Format: `Bearer fini_...` The key needs `write` scope.
</ParamField>
<ParamField header="Content-Type" type="string" required>
`application/json`
</ParamField>
## Path parameters
<ParamField path="id" type="string" required>
Agent ID whose prompts you want to update. Use [List agents](/en/api-reference/list-agents) to get the `botId`.
</ParamField>
## Body parameters
<ParamField body="hcPlanningPrompt" type="PromptSection[]" required>
Full Planning Prompt section array. Send the complete array, not just the section you changed.
</ParamField>
<ParamField body="hcGuidelinePrompt" type="PromptSection[]" required>
Full Main Guidelines section array.
</ParamField>
<ParamField body="hcChannelPrompt" type="PromptSection[]" required>
Full Channel Prompt section array.
</ParamField>
<Note>
For write payloads, subsection helper fields from merged reads such as `defaultPrompt` and `custom` are not required. A safe round-trip pattern is to start from [Get prompts](/en/api-reference/get-prompts), edit the arrays in place, and send them back.
</Note>
## Response
Returns the saved [`Prompt`](/en/api-reference/prompts#prompt-object) version.
<RequestExample>
~~~bash cURL theme={null}
curl --request POST \
--url 'https://api-prod.usefini.com/v2/bots/4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3/hc-prompt/public' \
--header 'Authorization: Bearer fini_your_api_key' \
--header 'Content-Type: application/json' \
--data '{
"hcPlanningPrompt": [
"Answer only from approved knowledge and escalate if unsure."
],
"hcGuidelinePrompt": [
"Answer only from approved knowledge and escalate if unsure."
],
"hcChannelPrompt": [
"Answer only from approved knowledge and escalate if unsure."
]
}'
~~~
~~~javascript Node.js theme={null}
const response = await fetch('https://api-prod.usefini.com/v2/bots/4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3/hc-prompt/public', {
method: 'POST',
headers: {
Authorization: 'Bearer fini_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
'hcPlanningPrompt': [
'Answer only from approved knowledge and escalate if unsure.'
],
'hcGuidelinePrompt': [
'Answer only from approved knowledge and escalate if unsure.'
],
'hcChannelPrompt': [
'Answer only from approved knowledge and escalate if unsure.'
]
}
)
});
const data = await response.json();
~~~
~~~python Python theme={null}
import requests
response = requests.post(
"https://api-prod.usefini.com/v2/bots/4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3/hc-prompt/public",
headers={"Authorization": "Bearer fini_your_api_key", "Content-Type": "application/json"},
json={
"hcPlanningPrompt": [
"Answer only from approved knowledge and escalate if unsure."
],
"hcGuidelinePrompt": [
"Answer only from approved knowledge and escalate if unsure."
],
"hcChannelPrompt": [
"Answer only from approved knowledge and escalate if unsure."
]
},
)
data = response.json()
~~~
</RequestExample>
<ResponseExample>
~~~json 200 OK theme={null}
{
"id": "9c59b2df-5d5f-4c9e-a070-9ac3c2b1b24e",
"botId": "2a1cf0f0-f35d-46ad-8e61-a15c86b2b312",
"createdAt": "2026-07-28T08:55:32.000Z",
"createdBy": "api",
"hcPlanningPrompt": [
{
"id": "planning-main",
"name": "Planning",
"description": "How the agent plans an answer.",
"enabled": true,
"custom": true,
"subsections": [
{
"id": "planning-grounding",
"name": "Grounding",
"prompt": "Use approved knowledge before answering.",
"defaultPrompt": "Use retrieved knowledge before answering.",
"useDefault": false,
"enabled": true,
"custom": true
}
]
}
],
"hcGuidelinePrompt": [
{
"id": "guidelines-main",
"name": "Main Guidelines",
"description": "Global answer behavior.",
"enabled": true,
"custom": true,
"subsections": [
{
"id": "guidelines-escalation",
"name": "Escalation",
"prompt": "Escalate billing disputes when policy is unclear.",
"defaultPrompt": "Escalate when unsure.",
"useDefault": false,
"enabled": true,
"custom": true
}
]
}
],
"hcChannelPrompt": [
{
"id": "channel-chat",
"name": "Chat",
"description": "Chat-specific behavior.",
"enabled": true,
"custom": false,
"subsections": [
{
"id": "channel-chat-style",
"name": "Tone",
"prompt": "Keep replies concise and grounded in approved knowledge.",
"defaultPrompt": "Keep replies helpful and concise.",
"useDefault": false,
"enabled": true,
"custom": true
}
]
}
]
}
~~~
</ResponseExample>
<Note>
Current controller behavior: this response is the stored version row, not the merged template view. If you need the merged read shape with `defaultPrompt` and `custom`, call [Get prompts](/en/api-reference/get-prompts) after writing.
</Note>
## Errors
<AccordionGroup>
<Accordion title="400 Bad Request" icon="circle-exclamation">
The body is malformed. All three top-level prompt arrays are required.
</Accordion>
<Accordion title="401 Unauthorized" icon="lock">
The API key is missing, malformed, revoked, or invalid.
</Accordion>
<Accordion title="403 Forbidden" icon="shield-halved">
The API key does not include the `write` scope required for this route.
</Accordion>
<Accordion title="404 Not Found" icon="ghost">
The agent ID does not exist.
</Accordion>
<Accordion title="406 Not Acceptable" icon="circle-question">
Current controller behavior: if the agent belongs to a different workspace, this route returns `406` with an invalid-agent message rather than `403`.
</Accordion>
<Accordion title="500 Internal Server Error" icon="triangle-exclamation">
Fini failed while saving the prompt version in storage.
</Accordion>
</AccordionGroup>
## Related topics
- [Create prompt draft version](/en/api-reference/create-prompt-draft-version.md)
- [Overview](/en/api-reference/prompts.md)
- [Get active Refine with AI session](/en/api-reference/get-active-fix-review-session.md)
This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.
Prompts

