> ## Documentation Index
> Fetch the complete documentation index at: https://docs.metalntwx.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Send a Direct Payout

> Pay suppliers, contractors or your own accounts under a mandate, with no seller on the other end: the agent signs the transfer and the facilitator submits it

An agent that pays suppliers, contractors or your own accounts needs no
seller on the other end: the recipient is an address, and nothing has to
run there. A payout is that transfer under a mandate, so the agent can pay
only the addresses you named, if you named any, within the cap and budget
you set, and every payout is on chain where anyone with the credential and
the issuer's public key can verify it.

`mandate pull` signs the transfer with the credential and mandate key from
[spending limits](https://docs.metalntwx.com/agents/spending-limits.md). The facilitator submits it and
pays the gas, as it does for a payment to a seller.

```bash theme={null}
metal-agent mandate pull --credential ./mandate.json --to <payee address> --amount 2.50 --payment-id refund-1042 \
  --network testnet --rpc-url <your endpoint>
```

```text theme={null}
transaction <transaction hash>
outcome paid
spent 6.5 *USDZ of 10 *USDZ
payer <account address>
payee <payee address>
amount 2.5 *USDZ
explorer https://testnet.metalntwx.com/tx/<transaction hash>
gas <gas used>
```

`--payment-id` is your id for the payout, such as the refund's or the
invoice's. A retry under the same id sends the same payout: once it has paid,
it reports `already paid, nothing sent` with the mandate's current spend. Two
payouts of one amount to one payee, such as two refunds to one customer, are
two payments under two ids. Without an id, a payout is known by its payee and
amount, so the second, sent while the first is pending, sends the first again.

A retry runs from the same home directory, under the same credential, and
with or without `--payment-id` as the first run did; otherwise it signs a
new payout. A refused payout paid nothing, so its id may be sent again with
other values. An id recorded as paid or held in a transaction the chain does
not hold, as after a chain reset, fails and sends nothing.

| Outcome | Exit | Meaning |
| - | - | - |
| `paid` | 0 | The payee was paid. If `kept …: the outcome was not recorded` prints last, the same command reports it again. |
| `refused` | 1 | The mandate refused it when `pull` checked it, and nothing was paid. `pull` prints the reason. Any `error:` line also exits 1. |
| `pending` | 3 | No outcome yet. Run the same command again: it sends the same payout, which pays at most once. |
| `held` | 4 | The receive policy contract holds it in escrow. The payee was not paid and the amount counts against the budget, so do not send it again: the payee, or the authority its policy names, releases it. |

To submit a payout yourself, pass `--key` with a key that holds `*USDZ` for
gas. With `--key` and `--record-refusal`, a refused payout is sent, and the
refusal is recorded on chain in a transaction that moves nothing.
`mandate verify` lists every payment under the mandate, payouts included,
and every recorded refusal.

> [card] [Pay under spending limits](https://docs.metalntwx.com/agents/spending-limits.md)
>
> The mandate a payout is made under, and its refusal reasons.

> [card] [Verify a transfer](https://docs.metalntwx.com/build/payments/verify-and-reconcile-payments.md)
>
> The checks a backend makes before it trusts a transfer.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.