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

# Make a One Time Purchase

> One quote, one passkey tap and one verified order

A one time purchase runs from quote to verified order with a single moment of user intent. The user approves the cap, the merchant and the validity with one passkey tap and the mandate is spent after the purchase.

<Steps>
  <Step title="Quote the item" icon="tag">
    The agent picks the item through your product discovery and the module opens the merchant checkout for it.

    * Your application opens the quote with `POST /quotes` and receives the items, shipping and tax estimate with a quote reference
    * The quote pins the amount that the mandate cap anchors to
  </Step>

  <Step title="Approve the mandate" icon="fingerprint">
    The user reviews the cap, the merchant and the expiry in chat and approves with a passkey biometric.

    * Your application creates the mandate with `POST /mandates` using the `onetime` frequency
    * The signed approval authorises a single use network token and cryptogram scoped to the approved mandate cap, merchant and time window
    * Reap confirms activation through the `mandate-approved` webhook
  </Step>

  <Step title="Execute the checkout" icon="shopping-cart">
    Reap completes the real merchant checkout and the agent never handles a credential.

    * Your application runs the checkout with `POST /checkouts` from the quote reference and the mandate
    * Reap fills contact and shipping, waits for the live total to settle and reconciles it against the quote before any charge
    * Reap pays with the single use network token on the secure surface and returns the merchant order reference through the `checkout-completed` webhook

    <Warning>
      The approved mandate cap is the hard spending limit. A total that drifts from the quote but stays within the cap moves the checkout to `requires_new_quote` and the purchase proceeds under the same mandate once a new quote is generated. A total above the cap fails the payment and the user must approve a new mandate with a passkey tap.
    </Warning>
  </Step>

  <Step title="Clear a challenge when one fires" icon="shield-half">
    Most purchases do not require this step because the passkey approval already authenticated the user. An occasional 3DS challenge still fires under specific merchant rules or stricter issuer card policies.

    * Reap pauses the checkout and delivers the challenge through the `checkout-escalated` webhook
    * You surface the human in the loop approval in the chat
    * Your application relays the decision with `POST /checkouts/id/escalation/respond` and the checkout resumes or aborts

    <Warning>
      The user must respond within five minutes of the challenge being created.
    </Warning>
  </Step>

  <Step title="Confirm the verified order" icon="clipboard-check">
    Reap matches the order against the card authorisation event on its own rails.

    * Reap fires the `order-completed` webhook when the order is verified
    * Your application fetches the record with `GET /orders/id` and the agent confirms the verified order back to the user
    * The one time mandate is spent and the next order starts from a fresh quote and a fresh approval
  </Step>
</Steps>

## A worked example

<Tabs>
  <Tab title="What the user sees">
    The user asks the agent to buy Sony WH 1000XM5 headphones for USD 129 with a spending cap of USD 150. At audiohub.com the user approves the mandate with a single passkey tap. The agent confirms the checkout at USD 138.42 including all charges and reports order 12345 with Friday delivery.
  </Tab>

  <Tab title="What happens underneath">
    * `POST /quotes` opens the audiohub.com checkout and returns the priced proposal
    * `POST /mandates` captures the passkey approval for the USD 150 cap with a `onetime` frequency
    * `POST /checkouts` completes the purchase at USD 138.42 with a single use network token
    * The `order-completed` webhook confirms order 12345 against the card authorisation
  </Tab>
</Tabs>

## Next steps

<CardGroup cols={2}>
  <Card title="Set up recurring purchases" icon="repeat" href="/agentic-payment/recurring-purchases">
    One approval that stands for every later cycle
  </Card>

  <Card title="Read the FAQ" icon="help-circle" href="/agentic-payment/faq">
    Coverage, limits and the questions prospects ask
  </Card>
</CardGroup>
