Conversations
Generate Answer
Send a message event into Fini and return the public events created for that submission.
POST
Use this endpoint when your backend needs to send a turn into Fini. Pass
interactionId to continue an existing conversation, or botId to let Fini create or resolve one for that agent. The route stores the incoming event, runs the normal reply flow for user messages, and returns the public event objects created while handling that submission.
Headers
Bearer token containing your Fini workspace API key. Format:
Bearer fini_... The key needs write scope.Body parameters
Message text to add as the incoming event.
Event role. Allowed values are
user, agent, finibot, and otherbot. Most public callers should use user.Existing conversation ID to continue. If omitted, provide
botId and Fini will create or resolve a conversation for that bot.Agent ID to use when starting a new conversation. Required when
interactionId is omitted.Optional conversation metadata to merge into the request state.
Public attachment upload support for
Generate Answer is coming soon through a dedicated public API flow. Until that ships, treat this route as text-only.Request example
If you send
role: "agent" or another non-user role, Fini stores that event and returns it immediately. The route only generates a new AI reply for user events.Response
The response is a top-level array of public events created while handling this submission. This is the same event shape returned insideevents[] on List conversations.
Array of public events created for the submission.
Errors
400 Bad Request
400 Bad Request
The body is malformed. Common causes are omitting
content, or omitting both interactionId and botId.401 Unauthorized
401 Unauthorized
403 Forbidden
403 Forbidden
The API key does not include the
write scope required for this route.500 Internal Server Error
500 Internal Server Error
Fini failed while resolving the bot, loading or creating the conversation, persisting the event, or generating the reply. Unknown
interactionId or botId values currently surface here on the public route as well. Retry once, then investigate the conversation in Inbox if the error persists.
