Help

10. Mandates

What is a mandate?

A mandate is a capped permission you sign on-chain. It lets one merchant collect USDC from your wallet, up to a set amount per month, for a set number of months. You stay in control: you can pause or revoke it at any time, and the merchant can never collect more than the cap.

  • The menu entry is Mandates ("Caps, merchants, pause or cancel").
  • Mandates are paid in USDC.
  • Platform note: on iOS, Mandates are coming soon. On the extension, you can create a mandate, revoke one by ID, or Stop all.

"I pay" and "I get paid" (direction icons)

At the top of Mandates, switch between I pay and I get paid.

IconMeaning
↗ arrow up-right (grey)Outgoing, you pay. You approved a merchant to collect from you.
↙ arrow down-left (green)Incoming, you get paid. Someone approved you to collect from them. A mandate counts as incoming when the payee is one of your own addresses.

The detail sheet also says You pay or You get paid.

Tabs, search and filters

  • Tabs:
    • Requests: waiting for your review
    • Active
    • Paused
    • History: revoked and expired items
  • Badges and pills: tab badges show the exact count up to 99, then 99+. Status pills are Review, Active, Paused, Revoked and Expired. New requests that are under 10 minutes old get a New pill.
  • Rows: each row reads like "1 USDC / month · 3 months", followed by the merchant name and a short ID, for example "Acme Coffee · #1fa7…47d9".
  • Search: "Search merchant, address or ID".
  • Filter and sort:
    • Sort by Newest, Oldest, Amount: high to low, or Amount: low to high
    • Any time or Custom dates
    • Minimum and maximum Amount per month
    • Rows per page
    • Group by merchant
    • Then tap Show results. Clear filters resets everything.
  • Live updates: with Live updates on, new items appear as "↑ N new · tap to show".

Empty states:

TabWhat you'll see
RequestsNo requests waiting: "When a merchant asks you to approve a spending cap, it appears here."
ActiveNo active mandates: "Approved spending caps show up here."
PausedNothing paused: "Paused mandates can't be charged until you resume them."
HistoryNo history yet: "Revoked and expired mandates and requests end up here."

Review and approve a merchant's request

A merchant usually sends you a link (t.me/PortaWallet_bot?startapp=mr_…) or shows a QR code. Opening it takes you straight to Review request.

If the request doesn't open automatically, open it yourself:

  1. Go to Mandates, tap ⋯ (More actions), then Paste request link or ID ("Open a merchant's request").
  2. Paste the link or the request ID into Request link or ID.
  3. Tap Review request.

The review shows:

  • Amount (X USDC / month)
  • Duration
  • On-chain cap (X USDC per month)
  • Payee

"Terms are set by the request and can't be changed."

Your choices:

  • Approve: "Then Confirm with your wallet". You'll sign on the Confirm screen.
  • Reject: "Nothing is signed".

On Confirm:

  • For a request that came from a link, enter your wallet password. You'll be asked: "Enter your wallet password to confirm this request."
  • After you confirm, you'll see "Submitted. Statuses update once the network confirms." The merchant is notified when the mandate is approved on-chain.

If a request won't open:

  • Can't open · expired or already used. Requests expire 24 hours after the merchant creates them. Ask for a new link.
  • Can't open · request not found
  • Can't open · sign in again
  • Too many tries · wait a minute
  • Can't open right now · try again

Create a mandate yourself

Go to ⋯ → New mandate and choose Recurring pay (one merchant, a cap and an expiry). Trading bot is marked Coming later.

  • Period: Hourly, Daily or Monthly. The amount label changes to match (Amount / hour, Amount / day or Amount / month (USDC)). See Open questions.
  • Amount / month (USDC): a number greater than 0, up to 10,000, with no more than 6 decimals.
  • Months: 1–12. The error is "Months must be 1 to 12".
  • Payee: a 0x address. It can't be the zero address or the USDC token address.
  • The summary ends with "on-chain cap = one month". Tap Continue, then sign on Confirm.

Validation messages:

  • "Amount must be greater than 0"
  • "Amount too large"
  • "Amount must be a plain number with at most 6 decimals"
  • "Payee is required"
  • "Payee must be 0x + 40 hex"
  • "Payee cannot be zero"
  • "Payee cannot be the cap token"

Before you can confirm:

  • If your wallet doesn't have mandates switched on yet, you'll see Enable mandates. Tap it first, because Confirm stays disabled until you do ("Enable mandates first.").
  • If you're asked to switch network first, switch to the network the mandate is on.

Pause or revoke a mandate

Open a mandate from I pay, then tap Pause or revoke.

  • Pause: the merchant can't charge you while the mandate is paused. It moves to the Paused tab.
  • Revoke: permanently ends the mandate. "Revoking stops future pulls right away." It moves to History.
  • Proof: View approval on Etherscan ↗ (Android: View on explorer ↗) opens the on-chain record.

Stop all mandates at once

Go to ⋯ → Stop all… ("Pause every mandate on this wallet at once"). This pauses every mandate on the wallet in one on-chain transaction. "No merchant can charge you until you resume." The network fee is shown before you sign.

  • To confirm, press and hold Stop all. If you prefer, type STOP instead.
  • If there's nothing to pause, the menu says "Nothing to stop right now".
  • To stop just one merchant, open it and choose Pause or revoke instead.

Approve or pause several at once

  • Approve in bulk: on I pay › Requests, select up to 5 requests and tap Approve N · sign once. "One signature approves all N. Each merchant can pull at most its own cap per month."
  • Pause in bulk: on I pay › Active, select up to 20 mandates and tap Pause N · sign once.

Collect (when you get paid)

If you're the payee on an incoming mandate, you can collect what's due.

  • Android: the incoming mandate detail (You get paid) shows Collect amount · Due now, or Next pull in Nd. When nothing is due, the button is disabled and gives a reason:
    • "Nothing is due yet"
    • "Paused. Nothing is due until this resumes."
    • "Nothing is due. This term has ended."
  • Platform note: in the Telegram and web apps, collect from the Incoming mandate screen using Fulfill → Collect. The list's detail sheet doesn't have a Collect button yet.
  • Limits: you can collect up to the remaining amount ("Amount (USDC)" is capped to what's left).
  • Payee address: the payee must be a regular wallet address (EOA). Contract payees can't collect yet.
  • Who controls the mandate: only the payer can pause or revoke it.

Usage-based (metered) mandates

Some merchants bill by usage. On review, you'll see "Usage-based billing · Porta settles to this payee." The Confirm screen then shows:

  • Billing: Usage-based · you pay only for what you use
  • Monthly cap: the most you can be charged per month, and for how many months
  • Settles: when your usage reaches a threshold, or every 24 h
  • Credit limit: the most unsettled usage allowed. After that, usage pauses until it settles.
  • Collected by: Porta billing 0x…· verified

PortaWallet checks that the billing address in the request matches Porta's own settlement address. If it doesn't, you'll see:

This request's billing address doesn't match Porta's. Don't approve it — ask the merchant for a new link.

Other messages:

  • "Usage billing isn't available on this network right now. Try again later."
  • "This request uses a token Porta can't bill. Ask the merchant for a new link."
  • "Couldn't verify the billing address. Check your connection and try again."

All help topicsBack to Porta