A software vendor runs its own ticket and chat system for parts dealers. Customers should get answers faster, but nobody wants a language model changing addresses or sending return labels on its own. The question is therefore not whether answers are automatic, but who is allowed to act.
The agent’s Hub interface separates the two cleanly: a turn returns the reply and a list of actions your system should carry out. Anything carrying requiresConfirmation happens only when your system confirms it in the next turn. The agent drafts, your system acts.
| Surface | Roles |
|---|---|
| Sales agent | Software vendor, Platform and marketplace, Parts trading |
What this case requires
- A configured profile.
POST /agent/conversationsrequires aprofileId; without a profile there is no instruction, no tone and no permissions. - Your own tools for the actions. Whatever the agent proposes, your system must be able to carry out — a shipment status, an address change, a return label.
- Somewhere to obtain confirmations. An action with
requiresConfirmationwaits for an explicit yes. - The API key on the server. This interface is meant for your backend, not for the customer’s browser.
The sequence
The table names the responsible call per stage and what exists afterwards. The reasoning for why a stage cannot be skipped follows below it.
| Stage | Call | What exists afterwards |
|---|---|---|
| Read the contract | GET /agent/capabilities | actionTypes, intents and limits — read once at integration instead of hard-coded |
| Create the conversation | POST /agent/conversations | profileId required, optionally channel and threadKey; back come conversationId and greeting |
| Run a turn | POST /agent/conversations/{conversationId}/messages | reply and actions; requiresConfirmation waits for your confirmation in the next turn |
| Append without a turn | POST /agent/conversations/{conversationId}/ingest | author end_user or note — stored without asking the model |
| Close the conversation | POST /agent/conversations/{conversationId}/close | outcome such as sold, not_sold or handed_over, plus orderRef |
Why each stage is needed
- Read the contract.
GET /agent/capabilitiesnames formats, channels,actionTypes,intentsandlimits. The contract explicitly recommends reading it once at integration instead of hard-coding limits — otherwise your integration quietly goes out of date with the next extension. - Create the conversation.
POST /agent/conversationsrequiresprofileIdand optionally takes, among others,channel,threadKey,subjectandexternalRef. The contract does not describe whatthreadKeydoes on creation;GET /agent/inbox/conversationscan be filtered bythreadKeyas an exact thread key. - Run the turn.
POST /agent/conversations/{conversationId}/messagesreturnsreply,intent,needsHuman,findingsandactions. Each action carries atype—customer_tool,hub_call,handofforrequest_photo— and where neededrequiresConfirmation. Results go back in the next turn astoolResults, confirmations asconfirmations. - Append without a turn.
POST /agent/conversations/{conversationId}/ingeststores a message or an internal note withauthorend_userornote, without asking the model. That is the route for conversations a colleague is currently handling. - Close the conversation.
POST /agent/conversations/{conversationId}/closetakes anoutcome— such assold,not_sold,handed_overorspam— and optionallyorderRef. Closing is no formality: only with it can you evaluate what the agent actually achieved.
curl -X POST \
-H 'X-Api-Key: <API_KEY>' \
-H 'Content-Type: application/json' \
-d '{"confirmations":[{"actionId":"<actionId>","confirmed":true}]}' \
'https://api.tapinomahub.com/hub/index.php/agent/conversations/<conversationId>/messages'What you end up with
In the end your system answers faster without the agent ever changing anything about an order itself. Every action passes through your tools, every sensitive action through a confirmation — and every conversation ends with an evaluable outcome.
Where to find this in the documentation
The binding field lists, error codes and sample responses live in this surface’s OpenAPI contract at docs.tapinomahub.com (tapinoma-agent). All use cases arranged by surface and role: overview of the use cases.
Sources and legal references
Frequently asked
Does the agent execute actions itself?
No. It delivers them as proposals in actions. Your system carries them out and reports the result in the next turn as toolResults.
Why is there ingest when there are turns?
For messages the model should not answer — for example when a colleague is handling the conversation or an internal note belongs to it. Such messages do not ask the model.
Do I have to maintain limits such as message length myself?
No. They live in GET /agent/capabilities under limits. Read them at integration instead of hard-coding them.
