Agents
An agent is a named identity with rights: an AI agent, a cron script or a CI pipeline. The agent asks a human questions, requests approvals and accepts tasks; the human answers with buttons in Telegram/Max, the app or the dashboard. An agent is created together with an API key (project settings → “Agents”) or automatically when an MCP client connects.
Ask a human
The question is delivered to the agent’s participants as a card with buttons. The answer is an option or free text (if allowed). 1 credit per delivery.
Fetching the answer — long-poll
We hold the connection up to 45 seconds (wait, default 25) — no public address needed: works from cron, CI and a laptop. status=pending — call again.
Approving an external action
For actions outside Zapnoty (payment, deploy, deletion). The human sees [Approve]/[Decline]. Params are recorded in the audit — pass them honestly.
Who receives the question
By default the question goes to every recipient of the agent — whoever answers first wins, the rest see “Answered by Peter”. To ask one specific person, pass principal: a recipient id from the dashboard or a sub_… subscriber id. Recipients are assigned by the owner in the “Agents” tab — an agent cannot add them itself.
Rights and grants
Agent rights are configured across 18 resources: none · read · write · ask. “Ask” — the call returns 202 grant_required, the human approves once or for a period, and the retried call passes on the grant. 403 scope_forbidden — ask the owner to widen rights; 429 budget_exceeded — daily cap, stop.
A successful call made on a grant returns the X-Agent-Grant-Expires header — the moment the grant expires (or never). It tells you how long you can keep working without asking the human again.
Commands and tasks (wake)
The agent publishes commands — the human sees buttons in chat and the app, can type free text (if allowed) and schedule runs (recurring). The agent.task.created push webhook is available from the Basic plan.
Sandbox
With the test key, questions are not delivered and no credits are charged — run the whole scenario, including decline and expiry.
MCP
Claude Code and Cursor connect to mcp.zapnoty.com via OAuth with a rights picker (“Safe” — sending requires confirmation). Tools: zapnoty_ask_user (blocking — waits for the human), zapnoty_request_approval, zapnoty_check_answer, zapnoty_get_tasks and zapnoty_complete_task (tasks from the human), zapnoty_set_commands (chat buttons), zapnoty_send_to_thread (message without a question), zapnoty_request_key and zapnoty_verify_mandate.