Verified actions require a Builder plan or higher (the
customTools capability), alongside external MCP servers and custom form webhooks. On lower plans, creating the tool is refused.When to use which
The guarantees
Enforced on every call, with nothing to configure:- The identity is never dictated by the model. The
emailsent to your endpoint is the one the server verified. If the model proposes another one, it is dropped before the request is built. - Only your parameters get through. The model can fill the params you declared, and nothing else.
- No calls into a private network. The URL is re-validated before every call, DNS resolution included — loopback, RFC1918 ranges, link-local and cloud metadata endpoints are refused, which also defeats DNS rebinding.
- Your secret is encrypted at rest (AES-256-GCM) and only decrypted at call time. No API reads it back.
- The response is filtered before it reaches the model: keys matching
token|secret|password|credential|api_key|bearerare stripped, strings are capped at 2 000 characters, arrays at 20 items, depth at 4. - The call times out after 5 seconds. A slow backend degrades one answer, never the conversation.
Declare one
You create them through the API, with a key that carriestools:write.
Two agents, two roles. Your personal agent (Claude, Hermes, ClawBot) is the one that configures Animam over MCP — and this is the one tool type it may not create:
VERIFIED_ACTION is absent from CONFIGURABLE_TOOL_TYPES, and any secret key is stripped from a config an agent submits. A secret is not delegated to a model. Your site agent is the one that uses the tool, firing the call mid-conversation. There is no dashboard screen for it either — yet.secret is sent in plaintext once, at write time, and stored encrypted. Sending an already-encrypted value is rejected.
What your endpoint receives
email is always present and always server-verified. The other keys are exactly the params you declared — no more.
What your endpoint should answer
Return a JSON object with astatus field. Animam looks it up in your messages map and makes the agent say that sentence verbatim:
status is missing, Animam falls back to ok on a 2xx and error otherwise. On a non-2xx status with no matching message, the agent relays your failureMessage — it never invents an outcome.
Before the action can fire
The visitor must have proven their email inside the conversation. If they have not, the agent is told to run the verification first (send_verification_code, then verify_visitor_code) and to retry afterwards. An action can therefore never be triggered by someone merely claiming to be someone else.