curl --request PATCH \
--url 'https://api-prod.usefini.com/v2/hc-tools/4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3/public' \
--header 'Authorization: Bearer fini_your_api_key' \
--header 'Content-Type: application/json' \
--data '{
"name": "Refund policy",
"description": "Refund-policy conversations to re-check before prompt changes.",
"alwaysGet": true,
"inputSchema": [
"4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3"
],
"outputSchema": [
"4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3"
]
}'
const response = await fetch('https://api-prod.usefini.com/v2/hc-tools/4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3/public', {
method: 'PATCH',
headers: {
Authorization: 'Bearer fini_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
'name': 'Refund policy',
'description': 'Refund-policy conversations to re-check before prompt changes.',
'alwaysGet': true,
'inputSchema': [
'4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3'
],
'outputSchema': [
'4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3'
]
}
)
});
const data = await response.json();
import requests
response = requests.patch(
"https://api-prod.usefini.com/v2/hc-tools/4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3/public",
headers={"Authorization": "Bearer fini_your_api_key", "Content-Type": "application/json"},
json={
"name": "Refund policy",
"description": "Refund-policy conversations to re-check before prompt changes.",
"alwaysGet": True,
"inputSchema": [
"4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3"
],
"outputSchema": [
"4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3"
]
},
)
data = response.json()
{
"id": "4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3",
"name": "Customer plan",
"description": "Fetches the customer's active plan.",
"source": "widget",
"fields": [
{
"name": "plan",
"type": "string",
"visibleToAi": true,
"useInRulebooks": true
}
],
"botIds": [
"2a1cf0f0-f35d-46ad-8e61-a15c86b2b312"
],
"createdAt": "2026-07-28T08:55:32.000Z",
"updatedAt": "2026-07-28T09:10:18.000Z"
}
Attributes
Update attribute
Update an attribute, including its input and output schema.
PATCH
/
v2
/
hc-tools
/
{id}
/
public
curl --request PATCH \
--url 'https://api-prod.usefini.com/v2/hc-tools/4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3/public' \
--header 'Authorization: Bearer fini_your_api_key' \
--header 'Content-Type: application/json' \
--data '{
"name": "Refund policy",
"description": "Refund-policy conversations to re-check before prompt changes.",
"alwaysGet": true,
"inputSchema": [
"4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3"
],
"outputSchema": [
"4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3"
]
}'
const response = await fetch('https://api-prod.usefini.com/v2/hc-tools/4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3/public', {
method: 'PATCH',
headers: {
Authorization: 'Bearer fini_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
'name': 'Refund policy',
'description': 'Refund-policy conversations to re-check before prompt changes.',
'alwaysGet': true,
'inputSchema': [
'4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3'
],
'outputSchema': [
'4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3'
]
}
)
});
const data = await response.json();
import requests
response = requests.patch(
"https://api-prod.usefini.com/v2/hc-tools/4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3/public",
headers={"Authorization": "Bearer fini_your_api_key", "Content-Type": "application/json"},
json={
"name": "Refund policy",
"description": "Refund-policy conversations to re-check before prompt changes.",
"alwaysGet": True,
"inputSchema": [
"4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3"
],
"outputSchema": [
"4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3"
]
},
)
data = response.json()
{
"id": "4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3",
"name": "Customer plan",
"description": "Fetches the customer's active plan.",
"source": "widget",
"fields": [
{
"name": "plan",
"type": "string",
"visibleToAi": true,
"useInRulebooks": true
}
],
"botIds": [
"2a1cf0f0-f35d-46ad-8e61-a15c86b2b312"
],
"createdAt": "2026-07-28T08:55:32.000Z",
"updatedAt": "2026-07-28T09:10:18.000Z"
}
Updates one
Attribute. This is where you set the inputSchema and outputSchema, including the per-field sendToLlm (“Visible to AI”) flag that controls which resolved values the agent can see.
Headers
string
required
Bearer token containing your Fini workspace API key. Format:
Bearer fini_... The key needs write scope.string
required
application/jsonPath parameters
string
required
Attribute ID to update.
Body parameters
All fields are optional. Send only what you want to change.string
Updated display name.
string
Updated description.
boolean
Send
false to convert the attribute into a rule-invoked action.InputSchemaField[]
Typed inputs. See InputSchemaField.
OutputSchemaField[]
Typed outputs. See OutputSchemaField. Set
sendToLlm per field to control “Visible to AI”. For fields sourced from an external API call, set source: "apiResponse" and map path as [stepId].[responseMappingKey].Response
Returns the updatedAction / Attribute.
curl --request PATCH \
--url 'https://api-prod.usefini.com/v2/hc-tools/4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3/public' \
--header 'Authorization: Bearer fini_your_api_key' \
--header 'Content-Type: application/json' \
--data '{
"name": "Refund policy",
"description": "Refund-policy conversations to re-check before prompt changes.",
"alwaysGet": true,
"inputSchema": [
"4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3"
],
"outputSchema": [
"4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3"
]
}'
const response = await fetch('https://api-prod.usefini.com/v2/hc-tools/4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3/public', {
method: 'PATCH',
headers: {
Authorization: 'Bearer fini_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
'name': 'Refund policy',
'description': 'Refund-policy conversations to re-check before prompt changes.',
'alwaysGet': true,
'inputSchema': [
'4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3'
],
'outputSchema': [
'4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3'
]
}
)
});
const data = await response.json();
import requests
response = requests.patch(
"https://api-prod.usefini.com/v2/hc-tools/4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3/public",
headers={"Authorization": "Bearer fini_your_api_key", "Content-Type": "application/json"},
json={
"name": "Refund policy",
"description": "Refund-policy conversations to re-check before prompt changes.",
"alwaysGet": True,
"inputSchema": [
"4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3"
],
"outputSchema": [
"4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3"
]
},
)
data = response.json()
{
"id": "4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3",
"name": "Customer plan",
"description": "Fetches the customer's active plan.",
"source": "widget",
"fields": [
{
"name": "plan",
"type": "string",
"visibleToAi": true,
"useInRulebooks": true
}
],
"botIds": [
"2a1cf0f0-f35d-46ad-8e61-a15c86b2b312"
],
"createdAt": "2026-07-28T08:55:32.000Z",
"updatedAt": "2026-07-28T09:10:18.000Z"
}
Errors
400 Bad Request
400 Bad Request
The body is malformed.
401 Unauthorized
401 Unauthorized
The API key is missing, malformed, revoked, or invalid.
403 Forbidden
403 Forbidden
The API key does not include the
write scope required for this route.404 Not Found
404 Not Found
No attribute with that ID exists in your workspace.
500 Internal Server Error
500 Internal Server Error
Fini failed while updating the record in storage.
Was this page helpful?

