Picnic agents is in early access — read-only access only for now.
EN
Docs
Tools
get_action_status

get_action_status

Read the current status of a pending or past action by its ID. Use as a polling fallback when your MCP client doesn't render notifications/resources/updated for picnic://action/{action_id}, or to re-sync state after a disconnect.

Side-effect: when called on a broadcast or submitted action, this tool opportunistically queries the bundler/RPC for the userOp receipt and may advance status to executed or failed (and populate tx_hash + block_number) before returning. Best-effort and never throws — but it means this tool isn't strictly read-only.

Required scope: read:actions

Parameters:

NameTypeRequiredDescription
action_idstringyesID of an action returned by transfer, swap, or any of the card_* tools. The action must belong to the same user + OAuth client that created it.

Returns:

FieldTypeDescription
action_idstringEchoed back.
typestringOne of "transfer", "swap", "cardFreeze", "cardUnfreeze", "cardLimitSet".
statusstringCurrent status — see enum below.
summarystringHuman-readable summary the user saw on the sign page.
chain_idnumberChain the action targets.
smart_accountstringSmart account address the action operates on.
tx_hashstring | nullOn-chain tx hash. null until reconciliation lands the receipt.
user_op_hashstring | nullThe 4337 userOpHash. Computed at proposal time and present on every action from then on (including proposed/expired actions that never broadcast). Don't infer "this action broadcast" from user_op_hash being present — check broadcast_at or status instead.
block_numbernumber | nullBlock where the tx confirmed. Populated alongside tx_hash.
errorstring | nullError message if the action ended in failed, or if the bundler RPC returned an error during submission (in which case status may still be submitted while reconciliation runs).
created_atdateWhen the action tool created the pending action.
expires_atdateTTL deadline for signing.
signed_atdate | nullWhen the user signed (status moved to signed).
broadcast_atdate | nullWhen the bundler accepted the userOp (status moved to broadcast).
executed_atdate | nullWhen the on-chain receipt landed.
status_historyarrayAudit trail of every status transition.
status_history[].statusstringStatus at this entry (same enum as the top-level status).
status_history[].timestampdateWhen the transition happened.
status_history[].detailstring | nullOptional context, e.g. an error message attached to a failed transition.

Status enum:

StatusMeaning
proposedCreated by the action tool, awaiting user signature.
signedUser has signed; the sign endpoint is submitting the action.
submittedThe userOp is being handed to the bundler RPC (or, for card actions, the downstream Gnosis Pay API). Persists transiently or until reconciliation if the RPC errored mid-flight.
broadcastBundler accepted, user_op_hash known, awaiting on-chain receipt.
executedMined successfully on-chain.
failedOn-chain revert.
expiredTTL elapsed before the user signed.
rejectedUser declined at the sign page.

Errors:

  • Action not found: … — the action_id doesn't exist (or it's been retained beyond the 24-hour window).
  • Action does not belong to the authenticated user / Action belongs to a different OAuth client — the action was created by a different user/agent.
  • Scope errors — caller is missing read:actions.

Example prompt:

"Did my swap go through?" — agent calls get_action_status with the most recent action_id.