Instructing the agent and giving it a ceilingAll articles

Instructing the agent and giving it a ceiling

An agent without instruction answers arbitrarily, an agent without a cap costs arbitrarily. This case shows how both are settled before the first conversation.

Published: 2026-09-12Reading time: 5 mintapinomahub API & workflows
API & processesAPIPricing & valuation

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.

Instructing the agent and giving it a ceilingInput: the wish to answer enquiries automatically without giving up pricing control 1. Read the questionnaire (GET /agent/setup/questionnaire): sections and questions instead of a hand-written configuration 2. Profile from answers (POST /agent/setup/profiles): config with tone, rules, permissions and hubTools — the trusted instruction 3. Add the knowledge (POST /agent/profiles/{profileId}/faq): Approved answers with status; faqDropped names what no longer fits 4. Set the floor prices (PUT /agent/items/prices): minPriceCents per itemKey — the agent’s only basis for negotiation 5. Set the cap (PUT /agent/controls): monthlyChargeCapCents and dailyTurnCap bound the operation up front Output: an agent that answers in your tone, never bargains below the floor and can be stopped Without a floor price the agent does not negotiate. A missing limit is not an open limit.Instructing the agent and giving it a ceilingInput: the wish to answer enquiries automatically without giving up pricing control01Read the questionnaireGET /agent/setup/questionnairesections and questions instead of a hand-written configuration02Profile from answersPOST /agent/setup/profilesconfig with tone, rules, permissions and hubTools — the trusted instruction03Add the knowledgePOST /agent/profiles/{profileId}/faqApproved answers with status; faqDropped names what no longer fits04Set the floor pricesPUT /agent/items/pricesminPriceCents per itemKey — the agent’s only basis for negotiation05Set the capPUT /agent/controlsmonthlyChargeCapCents and dailyTurnCap bound the operation up frontOutput: an agent that answers in your tone, never bargains below the floor and can be stoppedWithout a floor price the agent does not negotiate. A missing limit is not an open limit.
Five calls from instruction to ceiling. Without a floor price the agent does not negotiate.

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.

SurfaceRoles
Sales agentParts 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.

The call chain of this use case
StageCallWhat exists afterwards
Read the questionnaireGET /agent/setup/questionnairesections and questions instead of a hand-written configuration
Profile from answersPOST /agent/setup/profilesconfig with tone, rules, permissions and hubTools — the trusted instruction
Add the knowledgePOST /agent/profiles/{profileId}/faqApproved answers with status; faqDropped names what no longer fits
Set the floor pricesPUT /agent/items/pricesminPriceCents per itemKey — the agent’s only basis for negotiation
Set the capPUT /agent/controlsmonthlyChargeCapCents and dailyTurnCap bound the operation up front

Why each stage is needed

  1. Read the questionnaire. GET /agent/setup/questionnaire returns sections and questions. 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.
  2. Create the profile from the answers. POST /agent/setup/profiles produces the config with assistantName, tone, rules, permissions and hubTools. The permissions are named individually here, not granted wholesale — that is the difference between a bounded and an unbounded agent.
  3. Store your own knowledge. POST /agent/profiles/{profileId}/faq accepts approved question-answer pairs with a status. The response reports faqCompiledChars and faqDropped: if an entry no longer fits the instruction, you are told instead of guessing.
  4. Set the floor prices. PUT /agent/items/prices writes minPriceCents per itemKey. 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.
  5. Set the ceiling. PUT /agent/controls fixes monthlyChargeCapCents, dailyTurnCap and lowBalanceWarningCents. On top of that the agent can be stopped and resumed at any time — a stop ends operation without losing the setup.
Set the monthly and daily ceiling
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.

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.