Picnic agents is in early access — read-only access only for now.
BR
Docs
Ferramentas
transfer

transfer

Inicia uma transferência de token de uma das smart accounts controladas pelo usuário pra um destinatário. Suporta tanto source picnic quanto gnosisPay — descubra os endereços disponíveis via get_smart_accounts. Retorna um sign_url e um resource_uri pra atualizações de status em tempo real. A execução começa assim que o usuário assina em sign_url.

Tipos de source:

  • picnic — executa em ~10s via bundler 4337. Usado pra topar o cartão (recipient = endereço do safe gnosisPay) ou enviar pra qualquer outro endereço.
  • gnosisPay (somente Gnosis chain) — usado pra sacar da conta do cartão. Enfileira pelo delay module do gnosisPay e dispara ~3 minutos depois da assinatura. A action vai pra broadcast quando enfileirada e pra executed quando o dispatch atrasado confirma on-chain.

Restrição de depósito no cartão: quando o destinatário é o próprio safe gnosisPay do usuário e a source é uma conta picnic, o asset_id TEM que ser o asset denominado pelo cartão (EUR / USD / GBP, conforme o fiatSymbol do cartão). Caso contrário a ferramenta rejeita antes — depositar o token errado deixaria o saldo travado no safe do cartão. Saques FROM o cartão não têm essa restrição (o safe pode legitimamente ter assets depositados por engano que o usuário precisa recuperar).

Escopos necessários: propose:transfer, execute:transfer

Parâmetros:

NomeTipoObrig.Descrição
source_smart_account_addressstringsimSmart account de origem que mantém o asset. Tem que ser uma das contas controladas pela passkey em source_chain_id. Use get_smart_accounts pra descobrir endereços.
source_chain_idnumbersimChain ID da smart account de origem. Tem que ser igual à chainId codificada em asset_id — divergência é rejeitada.
asset_idstringsimId do asset — eip155:{chainId}/erc20:{address} pra ERC-20s, eip155:{chainId}/bep20:{address} na chain 56, ou eip155:{chainId}/slip44:60 pra moeda nativa.
recipientstringsimDestino — endereço 0x EVM ou nome ENS (e.g. vitalik.eth). ENS sempre resolve na mainnet do Ethereum.
formatted_amountstringsimValor decimal nas unidades de exibição do asset, e.g. "1.5" pra 1.5 USDC. O servidor resolve os decimais a partir de asset_id.

Retorna:

CampoTipoDescrição
action_idstringUUID da action pendente. Passa pra get_action_status como fallback de polling.
statusstringSempre "proposed" imediatamente após esta chamada.
summarystringResumo legível mostrado na página de assinatura. Derivado server-side.
sign_urlstringURL que o usuário abre pra autorizar com a passkey.
resource_uristringpicnic://action/{action_id}. Assina via resources/subscribe pra receber notifications/resources/updated.
simulation_urlstringURL de preview Tenderly pra source picnic; null pra source gnosisPay (o enqueue no delay module não é um userOp).
expires_atdateTimestamp ISO; 10 minutos após criação.
external_recipientbooleantrue quando o destino não é uma das smart accounts controladas pelo usuário nessa chain. Surface esse aviso verbalmente pro usuário antes de abrir sign_url — transferências on-chain são irreversíveis.
warningsstring[]Linhas de aviso pro agente que chamou (hoje: a linha de external-recipient quando external_recipient = true). Array vazio quando não há nada pra sinalizar.

Ciclo de vida (status):

proposedsignedsubmittedbroadcastexecuted (caminho de sucesso) — mesma forma pros dois tipos de source. O que cada passo significa muda:

  • Source picnic: broadcast = bundler aceitou o userOp 4337; executed = userOp confirmou on-chain.
  • Source gnosisPay: broadcast = a tx de enqueue do delay module tá no mempool; executed = a tx de enqueue confirmou on-chain. O dispatch on-chain efetivo da transferência interna ocorre ~3 minutos depois via o job de scheduled transactions (e aparece em get_transactions nesse momento).

Outros estados terminais: failed (revert on-chain), expired, rejected.

Exemplos de prompt:

"Topa meu cartão com 5 USDC da minha conta Picnic na Base."

"Saca 10 EURE do meu cartão pra minha conta Picnic." (source gnosisPay, ~3 min)

"Manda 100 USDC pro vitalik.eth na Base."