Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.tallyforagents.com/llms.txt

Use this file to discover all available pages before exploring further.

Outbound

const { tx_hash, status } = await tally.pay({
  agent_id: "research-bot",
  to: "0x7a3fA1B9c4D2e6F8a0B1c2D3e4F5a6B7c8D9e0b21c",
  amount_usdc: 4.50,
  memo: "arxiv API access", // optional, indexed for search
});

Statuses

StatusMeaning
pendingBroadcast to the network, awaiting confirmation.
confirmedMined and indexed by Tally.
failedThe transaction reverted on-chain.
rejectedRejected by Tally before broadcast (e.g. allowance exceeded).
pay returns once the transaction is broadcast. Use webhooks to react to confirmed / failed.

Idempotency

Pass an idempotency_key to safely retry on network failures:
await tally.pay({
  agent_id: "research-bot",
  to,
  amount_usdc: 4.50,
  idempotency_key: "invoice-2026-04-117",
});
Two calls with the same idempotency_key only result in one payment. Use a deterministic ID derived from your own data (invoice number, request ID) so retries stay safe.

Inbound

Agent wallets can receive USDC directly. Share the agent’s wallet_address with whoever’s sending. Tally indexes inbound transfers automatically and attributes them to the right agent in your dashboard.
const agent = await tally.agents.get("research-bot");
// → share agent.wallet_address out-of-band
Inbound events are emitted via webhooks as payment.received.

Failed transactions

Tally retries network-level failures internally. Application-level failures (a revert because the recipient is invalid, for example) are surfaced as status: "failed" and a failure_reason field.
You won’t be billed for failed transactions.