> ## Documentation Index
> Fetch the complete documentation index at: https://open-fi.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Payments vs. Mandates

> When to use a one-time payment vs. the mandate / session-key / debit-pull flow.

OpenFi deliberately keeps these two flows separate at the API and SDK level so single transfers and standing agent authorizations never get conflated.

## One-time payments

Use `POST /v1/payments` when there is no need for a standing authorization: a single push or pull that happens once.

**Typical uses:** invoice settlement, one-off on/off-ramp, a single fiat-to-stablecoin conversion.

## Mandates → session keys → debit pulls

Use this three-call flow whenever funds need to be pulled **more than once**, especially by something that isn't a human clicking "approve" each time: a subscription engine, a treasury bot, or an autonomous AI agent.

<Steps>
  <Step title="Mandate">
    The standing authorization: who can be pulled from, the ceiling amount, the interval, and the purpose. Created once per payer relationship.
  </Step>

  <Step title="Session key">
    A time-bound, velocity-bound cryptographic allowance scoped to a mandate. This is what an autonomous agent actually holds, never the account's master credentials.
  </Step>

  <Step title="Debit pull">
    A single execution against an active session key. Enforced against the on-chain Allowance State Machine, not a static approval.
  </Step>
</Steps>

<Tip>
  Think of the mandate as the contract, the session key as a scoped, expiring key to that contract, and the debit pull as a single use of that key.
</Tip>
