The worry about an automatic salesperson is rarely technical. It is: what does the thing say when I am not watching, and what does it give away? Both questions are fair, and neither is answered by trust but by an instruction and a ceiling.
The profile is the agent’s trusted instruction: tone, rules, permissions and the Hub tools it may use. The floor prices are kept separate, and that matters — they are the only basis for negotiation, and a missing limit is not an open limit.
| Surface | Roles |
|---|---|
| Sales agent | Parts trading, Vehicle trading, Software vendor |
What this case requires
- An idea of your own tone. The questionnaire asks for it; filling it in arbitrarily yields an arbitrary agent.
- Decided permissions. Whether the agent may cancel, change an address or send a return label is a commercial decision, not a setting.
- Floor prices for the items to be negotiated. Without them the agent does not negotiate.
- A ceiling you are willing to carry. The cap is set before operation, not after the first invoice.
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 questionnaire | GET /agent/setup/questionnaire | sections and questions instead of a hand-written configuration |
| Profile from answers | POST /agent/setup/profiles | config with tone, rules, permissions and hubTools — the trusted instruction |
| Add the knowledge | POST /agent/profiles/{profileId}/faq | Approved answers with status; faqDropped names what no longer fits |
| Set the floor prices | PUT /agent/items/prices | minPriceCents per itemKey — the agent’s only basis for negotiation |
| Set the cap | PUT /agent/controls | monthlyChargeCapCents and dailyTurnCap bound the operation up front |
Why each stage is needed
- Read the questionnaire.
GET /agent/setup/questionnairereturnssectionsandquestions. The questionnaire replaces a hand-written configuration: it asks the questions one otherwise forgets, and it carries a version — so a later extension becomes visible. - Create the profile from the answers.
POST /agent/setup/profilesproduces theconfigwithassistantName,tone,rules,permissionsandhubTools. The permissions are named individually here, not granted wholesale — that is the difference between a bounded and an unbounded agent. - Store your own knowledge.
POST /agent/profiles/{profileId}/faqaccepts approved question-answer pairs with astatus. The response reportsfaqCompiledCharsandfaqDropped: if an entry no longer fits the instruction, you are told instead of guessing. - Set the floor prices.
PUT /agent/items/priceswritesminPriceCentsperitemKey. This is the only basis for negotiation. Storing nothing here does not give you an agent that negotiates generously but one that does not negotiate at all. - Set the ceiling.
PUT /agent/controlsfixesmonthlyChargeCapCents,dailyTurnCapandlowBalanceWarningCents. On top of that the agent can be stopped and resumed at any time — a stop ends operation without losing the setup.
curl -X PUT \
-H 'X-Api-Key: <API_KEY>' \
-H 'Content-Type: application/json' \
-d '{"controls":{"monthlyChargeCapCents":25000,"dailyTurnCap":200}}' \
'https://api.tapinomahub.com/hub/index.php/agent/controls'What you end up with
What remains is an agent that answers in your tone, exercises only the permissions granted, does not bargain below the floor price and stops at the ceiling reached. That is no longer a question of trust but a setting you can read back.
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
What happens if I store no floor price?
Then the agent does not negotiate on that item. A missing limit is not read as an open limit — that is deliberate.
Can I stop the agent immediately?
Yes. There is a stop and a resume. The stop optionally takes a closing message so that ongoing conversations do not end unanswered.
Why am I told that a FAQ entry was dropped?
Because the instruction has an upper bound. Instead of silently truncating entries, the response names how many were dropped — then you can decide what matters more.
