Intented docs

Refusals and errors

Every message the wallet refuses with, what it means and what to do.

When the wallet refuses, the transaction fails with Smart contract panicked: <message>, and nothing moves. These are the messages, from the contract's source.

The ones you'll see

MessageMeaningWhat to do
verdict is not ALLOWthe model signed DENYnothing: this is the wallet doing its job. Don't retry or reword the payment
over the per-transaction capthe payment is over the wallet's per-payment limitpay less, or the owner raises the cap
over the daily captoday's payments (UTC) would pass the daily limitwait for the next UTC day, or the owner raises the cap
wallet is frozenthe owner froze itthe owner unfreezes
receiver is not allowlistedthe agent called a contract the wallet doesn't allow, such as a token it doesn't holdthe owner allowlists it with allow_receiver
no caps set for this tokenthe wallet has no limits for that tokenthe owner sets them with set_token
action has expiredthe proposal's expiry_ms passed before executepropose again
nonce already usedthis nonce already executeduse a new nonce
proposal is not pendingit already executed, failed or was prunedpropose again
32 proposals are pending; prune expired ones firsttoo many open proposalscall prune with expired ones
signer is not allowlistedthe verdict was signed by a key the owner hasn't allowlistedcheck the API judges with the wallet's model; the owner registers the signer only after checking its attestation
recipient is not on the cross-chain recipient lista Base payment to an address the owner didn't listthe owner adds it, if the rules name it
cross-chain payments are offthe owner's cross-chain switch is offthe owner calls set_cross_chain(true)
agent onlypropose or execute came from another accountsign with the agent's key on the wallet
owner onlyan owner method came from another accountsign as the owner

The request doesn't match

These mean the verdict was for something other than this proposal, under these rules, from this judge. The Intented API never produces them for a proposal it read from the chain; they show a verdict being replayed or tampered with.

request mandate is not the registered mandate · request system prompt is not the registered prompt · request model is not the wallet's model · request action is not the proposal's action · request args are not the proposal's args · request amount is not the wallet's formatting of args.amount · request response_format is not the verdict schema for this action · request temperature must be 0 · request must not stream · request must turn thinking off · request must have exactly two messages: system, then user · request is not the firewall core's shape · verdict is for a different action · verdict is not valid JSON {reason, verdict, action} · verdict reason is over 280 characters · response must have exactly one choice · bad signature · mandate not set · prompt hash not set

Proposals

args_json is longer than 2048 bytes · method is longer than 64 characters · method must be an identifier · an action may not call the wallet itself · expiry_ms is more than an hour ahead · args are not JSON · no such proposal · token transfer amount must be a decimal string · token transfer amount is over u128

Payments on Base

a cross-chain payment must be an ft_transfer · cross_chain.recipient must be lowercase 0x plus 40 hex characters · the action's expiry_ms must be earlier than cross_chain.deadline_ms · no 1Click key is set · 1Click signature does not verify with the registered 1Click key · signed quote is dry · signed quote swapType is not EXACT_OUTPUT · signed quote recipientType is not DESTINATION_CHAIN · signed quote has a depositMemo · signed quote recipient is not cross_chain.recipient · signed quote destinationAsset is not cross_chain.dest_asset · signed quote originAsset is not the token being sent · signed quote amountIn is not args.amount · signed quote refundTo is not this wallet

Owner calls

amount is more than the wallet's NEAR above its storage · amount must be positive · allowance must be positive · daily cap must be at least the per-transaction cap · decimals must be at most 38 · eth_address must be 0x followed by 40 hex characters · public_key must be ed25519: plus a base58 32-byte key · text_hash must be 64 lowercase hex characters · model_id must be non-empty with no ':' · prune at most 64 proposals per call

Gas and keys

These come from NEAR, not the contract. The intented package turns them into plain sentences:

NEAR saysMeans
NotEnoughBalancethe wallet doesn't have enough NEAR for gas. The owner sends it NEAR
LackBalanceForStatethe wallet doesn't have enough NEAR for its storage. The owner sends it NEAR
NotEnoughAllowancethe agent's key has used up its gas allowance. The owner adds the key again with a new allowance
AccessKeyDoesNotExistthe agent's key isn't on the wallet. The owner adds it, or run intented init for a new one

On this page