<!-- tempo-docs-context -->
> Source: [/docs/guide/payments/send-parallel-transactions](https://tempo.xyz/developers/docs/guide/payments/send-parallel-transactions.md)
> Section: [Accounts](https://tempo.xyz/developers/docs/accounts.md). Create accounts, connect wallets, read balances, send and receive payments, and reconcile deposits.
> [Documentation index](https://tempo.xyz/developers/llms.txt) · [Docs skill](https://tempo.xyz/developers/SKILL.md)

> Tempo MCP: Use `search`, `find_pages`, `read_page`, and `code` at `https://mcp.tempo.xyz` for Tempo and related documentation.
> If an indexed page is missing or reflects an older site, read this site’s [documentation index](https://tempo.xyz/developers/llms.txt) and Markdown pages directly.

<span id="send-parallel-transactions-using-expiring-nonces" />

# Send payments in parallel

Submit independent payment transactions concurrently when each payment needs its own receipt. Use [batch payments](https://tempo.xyz/developers/docs/guide/payments/send-a-payment#batch-payment-transactions) when the calls must succeed or fail together in one transaction.

<span id="parallel-transaction-implementation-steps" />

<span id="set-up-wagmi-for-parallel-transactions" />

<span id="send-concurrent-transactions-with-nonce-keys" />

## Submit independent transactions

<span id="parallel-transaction-demo" />

Connect a test account and send two independent transactions on Moderato testnet. The wallet demo uses separate nonce keys; the backend example below uses expiring nonces. The wallet demo shows each submitted hash and confirms the expected token transfer before marking it complete. The backend example waits for each transaction’s receipt.

**Interactive demo: Send Parallel Payments**

1. Connect
2. Add funds
3. Send parallel payments

Use the funded Moderato account from the [Viem client setup](https://tempo.xyz/developers/docs/accounts/examples#viem-client). This Viem example selects [expiring nonces](https://tempo.xyz/developers/docs/guide/tempo-transaction#expiring-nonces) with `nonceKey: 'expiring'`, so the transactions do not compete for a sequential nonce.

:::code-group
```ts [parallel-payments.ts]
import { parseUnits } from 'viem'
import { client } from './viem.config'

const payments = [
  { to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8', amount: '10' },
  { to: '0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc', amount: '5' },
] as const

const results = await Promise.allSettled(
  payments.map(({ to, amount }) =>
    client.token.transferSync({
      token: '0x20c0000000000000000000000000000000000001',
      to,
      amount: parseUnits(amount, 6),
      nonceKey: 'expiring',
    }),
  ),
)

for (const [index, result] of results.entries()) {
  if (result.status === 'fulfilled') {
    console.log(index, result.value.receipt.transactionHash)
  } else {
    console.error(index, result.reason)
  }
}
```

```ts [viem.config.ts]
import { tempoModerato } from 'viem/chains'
import { Account, createClient } from 'viem/tempo'

const privateKey = process.env.TEMPO_PRIVATE_KEY
if (!privateKey || !/^0x[0-9a-fA-F]{64}$/.test(privateKey)) {
  throw new Error('Set TEMPO_PRIVATE_KEY to your funded test account private key')
}

export const client = createClient({
  account: Account.fromSecp256k1(privateKey as `0x${string}`),
  chain: tempoModerato,
  feeToken: '0x20c0000000000000000000000000000000000001',
})
```
:::

Replace the example recipients with test accounts you control. Each payment produces a separate result; one failure does not roll back the others. [Verify delivery](https://tempo.xyz/developers/docs/guide/payments/accept-a-payment#verify-stablecoin-payments) for each receipt before marking its payment complete.

Expiring nonces include a transaction validity window. If a submission times out, check its transaction hash before rebuilding or retrying the payment. See [expiring nonce behavior](https://tempo.xyz/developers/docs/guide/tempo-transaction#expiring-nonces) for expiry and replay rules.

## Parallel transaction learning resources

* [Expiring nonces](https://tempo.xyz/developers/docs/guide/tempo-transaction#expiring-nonces) — Choose nonce and validity-window settings for concurrent submissions.
* [Transactions](https://tempo.xyz/developers/docs/protocol/transactions) — Read the transaction format and execution rules.
