curl --request POST \
--url 'https://api-prod.usefini.com/v2/hc-interactions/0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8/internal-note/public' \
--header 'Authorization: Bearer fini_your_api_key' \
--header 'Content-Type: application/json' \
--data '{"content": "Billing review complete. Follow up with the customer tomorrow."}'
const conversationId = "0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8";
const response = await fetch(
`https://api-prod.usefini.com/v2/hc-interactions/${conversationId}/internal-note/public`,
{
method: "POST",
headers: {
Authorization: "Bearer fini_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
content: "Billing review complete. Follow up with the customer tomorrow.",
}),
}
);
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const note = await response.json();
import requests
conversation_id = "0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8"
response = requests.post(
f"https://api-prod.usefini.com/v2/hc-interactions/{conversation_id}/internal-note/public",
headers={"Authorization": "Bearer fini_your_api_key"},
json={
"content": "Billing review complete. Follow up with the customer tomorrow.",
},
timeout=30,
)
response.raise_for_status()
note = response.json()
{
"id": "f61a9a11-2c3b-4704-8f57-7078854d87cf",
"interactionId": "0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8",
"createdAt": 1792010400000,
"role": "agent",
"type": "internalnote",
"message": "Billing review complete. Follow up with the customer tomorrow.",
"externalId": null,
"externalCreatedAt": null,
"csatRating": null,
"feedback": null,
"approved": null,
"resolved": null,
"attachments": [],
"tags": [],
"usedArticles": []
}
Conversations
Add internal note
Add a private internal note to a native-ticketing conversation.
POST
/
v2
/
hc-interactions
/
{id}
/
internal-note
/
public
curl --request POST \
--url 'https://api-prod.usefini.com/v2/hc-interactions/0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8/internal-note/public' \
--header 'Authorization: Bearer fini_your_api_key' \
--header 'Content-Type: application/json' \
--data '{"content": "Billing review complete. Follow up with the customer tomorrow."}'
const conversationId = "0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8";
const response = await fetch(
`https://api-prod.usefini.com/v2/hc-interactions/${conversationId}/internal-note/public`,
{
method: "POST",
headers: {
Authorization: "Bearer fini_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
content: "Billing review complete. Follow up with the customer tomorrow.",
}),
}
);
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const note = await response.json();
import requests
conversation_id = "0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8"
response = requests.post(
f"https://api-prod.usefini.com/v2/hc-interactions/{conversation_id}/internal-note/public",
headers={"Authorization": "Bearer fini_your_api_key"},
json={
"content": "Billing review complete. Follow up with the customer tomorrow.",
},
timeout=30,
)
response.raise_for_status()
note = response.json()
{
"id": "f61a9a11-2c3b-4704-8f57-7078854d87cf",
"interactionId": "0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8",
"createdAt": 1792010400000,
"role": "agent",
"type": "internalnote",
"message": "Billing review complete. Follow up with the customer tomorrow.",
"externalId": null,
"externalCreatedAt": null,
"csatRating": null,
"feedback": null,
"approved": null,
"resolved": null,
"attachments": [],
"tags": [],
"usedArticles": []
}
Creates a new internal-note event in a conversation without sending a customer-facing message or generating an AI response. Native ticketing must be enabled for the workspace, and the conversation must have a widget or email source.
Unlike Add feedback note, this endpoint creates a new event rather than annotating an existing response. It does not post a note to an external helpdesk.
The event also includes the standard public-event feedback, external-reference, attachment, tag, and article fields. The empty arrays in this example are intentional: a newly created text note has no attachments, tags, or retrieved articles. Private author metadata is not included in this public response.
Headers
string
required
Bearer token containing your Fini workspace API key. Format:
Bearer fini_.... The key needs write scope.string
required
Send
application/json.Path parameters
string
required
ID of a widget or email conversation in the authenticated workspace.
Body parameters
string
required
Note text. Leading and trailing whitespace is trimmed; the result must not be empty. This endpoint accepts text, not attachments.
curl --request POST \
--url 'https://api-prod.usefini.com/v2/hc-interactions/0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8/internal-note/public' \
--header 'Authorization: Bearer fini_your_api_key' \
--header 'Content-Type: application/json' \
--data '{"content": "Billing review complete. Follow up with the customer tomorrow."}'
const conversationId = "0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8";
const response = await fetch(
`https://api-prod.usefini.com/v2/hc-interactions/${conversationId}/internal-note/public`,
{
method: "POST",
headers: {
Authorization: "Bearer fini_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
content: "Billing review complete. Follow up with the customer tomorrow.",
}),
}
);
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const note = await response.json();
import requests
conversation_id = "0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8"
response = requests.post(
f"https://api-prod.usefini.com/v2/hc-interactions/{conversation_id}/internal-note/public",
headers={"Authorization": "Bearer fini_your_api_key"},
json={
"content": "Billing review complete. Follow up with the customer tomorrow.",
},
timeout=30,
)
response.raise_for_status()
note = response.json()
Response
Returns201 Created with a single public event object, not an array or a success wrapper.
string
ID of the newly created event.
string
Conversation ID supplied in the path.
number
Event creation time as a Unix timestamp in milliseconds.
string
agent for the internal note.string
internalnote.string
The trimmed note text supplied as
content.{
"id": "f61a9a11-2c3b-4704-8f57-7078854d87cf",
"interactionId": "0b8626b0-4cc8-4a3d-8fc2-f18ad1a4a1a8",
"createdAt": 1792010400000,
"role": "agent",
"type": "internalnote",
"message": "Billing review complete. Follow up with the customer tomorrow.",
"externalId": null,
"externalCreatedAt": null,
"csatRating": null,
"feedback": null,
"approved": null,
"resolved": null,
"attachments": [],
"tags": [],
"usedArticles": []
}
Errors
400 Bad Request
400 Bad Request
content is missing, is not a string, or is empty after trimming; or the conversation source is not widget or email.401 Unauthorized
401 Unauthorized
The workspace API key is missing or invalid.
403 Forbidden
403 Forbidden
The API key lacks
write scope, or native ticketing is not enabled for the workspace.404 Not Found
404 Not Found
The conversation cannot be accessed in the authenticated workspace.
Related topics
Was this page helpful?

