> ## 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 or decline a purchase

> Review what your agent wants to buy, and approve or decline it. Approving from the connector arrives with payments.

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

<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>

Approving an errand's purchase from the connector arrives with payments.

When your agent has something ready to buy, it stops. Nothing is purchased until you decide — your agent cannot approve a purchase for you, from any surface. From the connector, you approve with your passkey, on a Sumvin page in your own browser.

<Steps>
  <Step title="Your agent asks for authorisation">
    Once your agent has assembled a purchase, it asks you to authorise it. A Stamped Mandate is proposed, and it waits for your signature. From the connector, this step arrives with payments.
  </Step>

  <Step title="Review it">
    <Tabs>
      <Tab title="Connector">
        Coming soon, with payments. Your agent can tell you an errand is waiting at `pending_approval`, but can't approve it for you.
      </Tab>

      <Tab title="Terminal">
        Check what's waiting with:

        ```bash theme={null}
        sumvin errand get <errand_id>
        ```

        Then bring up the mandate itself:

        ```bash theme={null}
        sumvin errand approve <errand_id>
        ```

        The CLI fetches the mandate and prints it before asking you to confirm.
      </Tab>
    </Tabs>

    When you review it, you see three things:

    * **The statement** — what your agent is asking to do, in plain language, including any conditions (a price ceiling, which sellers qualify).
    * **The spend ceiling** — the most it could ever authorise. Read this separately from the statement: two requests can use identical wording and still carry different ceilings, so the ceiling is always shown on its own line.
    * **When it expires.**
  </Step>

  <Step title="Approve">
    <Tabs>
      <Tab title="Connector">
        Coming soon, with payments. You'll approve in your own browser with your passkey, the one you created at the end of [verification](/get-started/first/verify).
      </Tab>

      <Tab title="Terminal">
        Answer `y` at the prompt, or run non-interactively with:

        ```bash theme={null}
        sumvin errand approve <errand_id> --yes
        ```
      </Tab>
    </Tabs>

    Once you approve, your agent can act — but only within the ceiling and conditions you just signed.
  </Step>

  <Step title="Or decline">
    Declining is final. It cancels the errand and releases anything it had reserved. Nothing is signed, and nothing is spent.

    <Tabs>
      <Tab title="Connector">
        Coming soon, with payments. Until then, you can ask your agent to cancel the errand.
      </Tab>

      <Tab title="Terminal">
        ```bash theme={null}
        sumvin errand reject <errand_id>
        ```
      </Tab>
    </Tabs>
  </Step>
</Steps>

<Note>
  If a mandate expires before you act on it, approving is no longer possible — decline it and ask your agent to try again.
</Note>

## See also

* [Stamped Mandates](/concepts/stamped-mandates) — what a mandate is and what signing one means.
* [Set limits](/guides/set-limits) — what you can constrain in a mandate before you sign.

<Tip>**Try asking your agent:** "Did my last request go through, or is it still waiting on me?"</Tip>
