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

# Approve your first Stamped Mandate

> Your agent proposes a spending mandate — one kind of Stamped Mandate — you review it on your own page, and you approve exactly what you see with your passkey; your agent can never approve its own mandate.

export const waitlists = {
  earlyAccess: "",
  payments: "",
  openBanking: "",
  developers: "",
  verifiers: ""
};

<Note>
  **Private preview:** this is rolling out and may not be available on your account yet.{waitlists.earlyAccess ? <> <a href={waitlists.earlyAccess}>Request early access →</a></> : null}
</Note>

<Note>
  **Coming soon:** payments arrive in a fast-follow release.{waitlists.payments ? <> <a href={waitlists.payments}>Join the waitlist →</a></> : " A waitlist opens shortly."}
</Note>

A Stamped Mandate is an authorisation you sign for what an agent may do for you. It belongs to your account, not to the agent that asked for it. This is your first one, and it's a spending mandate: what your agent may spend on, how much, and until when. It's one kind among several — see [what a mandate can authorise](/concepts/mandates/use-cases). Your agent asks. You decide.

**Your agent can never approve its own mandate.** It can propose one and check what you decided. Only you can approve it, with your passkey, on a Sumvin page in your own browser, away from the conversation.

## Before you start

* You're [verified](/get-started/first/verify). A request from an account that isn't verified yet is refused, and your agent tells you which step is missing.
* To approve from your agent: you've created your signing key, the passkey you approve with. You do this in your browser at the end of [verification](/get-started/first/verify). The terminal uses its own key instead; see the terminal tab below.

## Approve

<Tabs>
  <Tab title="In your agent (MCP, recommended)">
    <Steps>
      <Step title="Ask for a limit">
        Tell your agent what you want it to be able to do, and how much it may spend. It proposes a mandate with `mandate_request` and tells you, in your own money's terms, the most it would ever authorise.

        Nothing is granted yet. Asking twice for the same thing doesn't create two requests; it re-opens the one you already have.
      </Step>

      <Step title="Open the review">
        In chat apps that support it, a **Spending authority** card appears in the conversation. It shows the limit (**Up to**), what it **Spends on**, when the request **Lapses** if you don't answer, and, once signed, how long the mandate **Lasts until**. Choose **Review and sign**; your browser opens.

        A request to read your linked accounts or prove your balance shows **Reads**, **Proves** or **Reads and proves** in place of **Spends on**, and has no limit.

        Everywhere else, your agent gives you a link to open instead. The link is issued once. If it's lost, ask your agent to request the mandate again.
      </Step>

      <Step title="Set up your signing key (only if you skipped it)">
        You normally create your signing key at the end of verification. If you didn't, the page says this account can't approve requests yet and offers **Set up your signing key**. Follow it and create a passkey when your browser asks. Then ask your agent to request the mandate again.

        You do this once. Later reviews go straight to the request.
      </Step>

      <Step title="Read what you're signing">
        The page is headed **An agent is asking for spending authority** and shows who you're approving as. Under **Your signature binds** it lists the statement, what the mandate spends on, and how long it lasts. What you see here is exactly what you sign.
      </Step>

      <Step title="Grant or decline">
        Choose **Grant this authority** and confirm with your passkey, or choose **Decline**. Soon after you create your signing key, the page may say your account is finishing setup; it carries on by itself. Declining authorises nothing and needs no signature. The page confirms **Authority granted** or **Request declined**, and tells you to return to your agent.
      </Step>

      <Step title="Back in the conversation">
        The card updates to show your decision. Your agent learns the outcome by checking with `mandate_status`; nothing is pushed to it, so it may need a moment before it checks.
      </Step>
    </Steps>
  </Tab>

  <Tab title="In the terminal (CLI, for developers)">
    In the terminal, you approve a Stamped Mandate when an [errand](/get-started/first/errand) is waiting for your approval.

    <Steps>
      <Step title="Set up a signing key (first time only)">
        ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
        sumvin keys generate
        sumvin keys add-to-safe
        ```

        `keys generate` creates a signing key on this machine. `keys add-to-safe` registers it to your account and waits until the registration is confirmed. Your key stays on your machine.
      </Step>

      <Step title="Review the mandate">
        ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
        sumvin errand approve <errand-id>
        ```

        The CLI shows the statement, the spend limit on its own line, and the expiry, then asks you to confirm:

        ```text theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
        Authorise a purchase for errand <errand-id>. Purchase proceeds only while all of the following hold:
        - the price is at most 180 USD
        - availability is one of: in_stock

        Ceiling: Up to USD 200.00
        Expires: 2026-08-12T07:30:00.000Z

        Approve this errand's purchase?
        ```

        Read the ceiling as carefully as the statement. The statement doesn't contain it, and the ceiling is what your signature binds.
      </Step>

      <Step title="Confirm or decline">
        Answer `y` to sign and submit. Anything else sends nothing. To decline instead:

        ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
        sumvin errand reject <errand-id>
        ```

        Declining cancels the errand and authorises nothing.
      </Step>
    </Steps>
  </Tab>
</Tabs>

## What you'll see

| Status         | What it means                                                                               |
| -------------- | ------------------------------------------------------------------------------------------- |
| Waiting on you | You haven't answered yet. Nothing is authorised.                                            |
| Granted        | You signed. Your agent can now spend within this limit.                                     |
| Declined       | Nothing was authorised.                                                                     |
| Lapsed         | The request expired unanswered. Nothing was authorised. Ask your agent to request it again. |
| Replaced       | A newer request replaced this one. Use the latest card.                                     |

Your agent sees these as `proposed`, `stamped`, `declined` and `expired`. If a request ended some other way than you answering it, for example it was withdrawn, your agent receives a reason it can read back to you.

## Two ways to approve

A Stamped Mandate can work in one of two ways:

* **Approve each purchase.** Your agent prepares a purchase and waits for you to sign it. This is the default.
* **Pre-authorise repeat errands.** You sign once, with limits, and your agent can repeat an errand within them without asking again. See [Repeat errands](/guides/repeat-errands).

## What can go wrong

<AccordionGroup>
  <Accordion title="The card says the review page couldn't be opened">
    Ask your agent for the review link and open it yourself.
  </Accordion>

  <Accordion title="The page says your account setup isn't finished">
    You'll see **Your account setup isn't finished**. Finish [verification](/get-started/first/verify), then ask your agent to request the mandate again. You can still decline the request so your agent isn't left waiting.
  </Accordion>

  <Accordion title="The page says your signing key isn't set up yet">
    You haven't created your signing key. Choose **Set up your signing key**, create your passkey, then ask your agent to request the mandate again. You can still decline the request so your agent isn't left waiting.
  </Accordion>

  <Accordion title="The page says 'Signing key unavailable'">
    Your signing key couldn't be unlocked on this device. Nothing was authorised. Try again with the passkey you created, or ask your agent to try again if this keeps happening.
  </Accordion>

  <Accordion title="The page says 'Different account' or 'Different signing key'">
    You're signed in as someone other than the account your agent named. Sign in with the right account, then try again.
  </Accordion>

  <Accordion title="The link expired or was already decided">
    **Link expired** means the request lapsed; ask your agent to request it again. **Already decided** means there is nothing left to do.
  </Accordion>

  <Accordion title="In the terminal: 'This errand's approval mandate has expired'">
    You can't approve an expired mandate. Run `sumvin errand reject <errand-id>` to close the errand, then start a new one.
  </Accordion>

  <Accordion title="In the terminal: the signature isn't recognised">
    Run `sumvin errand approve` again; each run fetches the current terms. If it fails again, check your key with `sumvin keys show`.
  </Accordion>
</AccordionGroup>

<Tip>**Try asking your agent:** "Set up a spending limit of \$50 for groceries this week."</Tip>
