Docs
Everything you need to verify your first payout run.
A five-minute quickstart, the CSV format, what each status means, and how to use the API.
Quickstart
Your first verification.
01
Create an account
Register, confirm your email and create an organisation.
02
Add your paying wallet
Wallets → Add wallet, with the public address your payouts come from.
03
Start a verification
New Verification: name the batch, pick USDC on Base, the wallet and the time window.
04
Upload your payouts
Use the CSV template below. Every row is validated before anything is stored.
05
Read the results
Each row gets a status with its evidence. Review exceptions, sign off, export a report.
Payout file
The CSV format.
| Column | Required | Meaning |
|---|---|---|
| payout_id | Required | Your identifier for the payout. Unique within the file. |
| recipient_address | Required | The address that should receive the payout. Mixed-case addresses must pass their EIP-55 checksum. |
| amount | Required | A decimal amount in the token, such as 250.00. More decimals than the token supports is an error, never rounded. |
| token_address | Optional | If present, it must be the batch's token; rows for another token belong in a separate batch. Bridged variants (USDbC, USDC.e) are different tokens. |
| reference | Optional | A note carried into results and reports, such as an invoice number. |
| recipient_label | Optional | A readable name for the recipient. |
Amounts are always decimal strings. A file with any invalid row is rejected as a whole, with a report of every problem, so a batch never contains half a file.
Statuses
What the results mean.
Verified means the right amount reached the right recipient in a finalized block, with the whole window scanned. Provisional means paid but not final yet, and Unverified means the window has not been fully checked yet; both resolve on their own as the chain settles. The others are exceptions that need a person: missing, underpaid, overpaid, potential duplicate, wrong token, ambiguous, unsupported and scan incomplete.
Finality, in one line
A transfer in a block that is not finalized can still disappear. PayoutGuard never says Verified until the network has finalized the block and every block of the window has been read.
API
The same results, for your systems.
Authentication
Create a key under API Keys (owners and admins). Send it as
Authorization: Bearer pg_live_…. It is shown once.Scopes
Keys are default-deny: wallets, batches, verifications, reports, Safe and monitoring each have their own scope. A key can never manage keys, members or billing.
Safe retries
Send
Idempotency-Keywhen creating batches, submitting rows, starting a verification or exporting a report. A retry with the same key replays the first answer.Plans
API access is included from Starter, with a per-key rate limit that grows with the plan.
Create a batch
curl https://<your-host>/api/v1/orgs/<org-id>/batches \
-H "Authorization: Bearer pg_live_..." \
-H "Idempotency-Key: october-rewards-2026-10" \
-H "Content-Type: application/json" \
-d '{"name": "October rewards", "chain_id": 8453,
"token_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"source_addresses": ["0x..."],
"window_start": "2026-10-01T00:00:00Z",
"window_end": "2026-10-31T23:59:59Z"}'Verify your next payout run free.
No card, no keys, nothing to install.



