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

# Create a payment

> Execute a single one-time push or pull payment, with atomic settlement into the destination stablecoin or account.

Use this endpoint for any transfer that doesn't need a standing authorization. For recurring, agent-initiated pulls, use [mandates](/api-reference/agentic/create-mandate) instead.

### Body Parameters

<ParamField body="amount" type="number" required>
  Amount in the currency's major unit (e.g. `25.00`).
</ParamField>

<ParamField body="currency" type="string" required>
  Three-letter currency code. One of `USD`, `CAD`, `GBP`. See [Supported Rails](/essentials/supported-rails) for per-currency constraints.
</ParamField>

<ParamField body="source" type="object" required>
  <Expandable title="properties">
    <ParamField body="type" type="string" required>
      `bank_account` or `wallet`.
    </ParamField>

    <ParamField body="id" type="string">
      Linked bank account ID (required when `type` is `bank_account`).
    </ParamField>

    <ParamField body="address" type="string">
      Wallet address (required when `type` is `wallet`).
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="destination" type="object" required>
  Same shape as `source`.
</ParamField>

<ParamField body="reference" type="string">
  Free-text reference or invoice ID, echoed back on the resource and used to reconcile against your own ERP/accounting system.
</ParamField>

### Response

<ResponseField name="id" type="string">
  Unique payment ID, prefixed `pay_`.
</ResponseField>

<ResponseField name="status" type="string">
  One of `pending`, `settled`, `failed`.
</ResponseField>

<ResponseField name="settlement" type="object">
  <Expandable title="properties">
    <ResponseField name="chain" type="string">
      Settlement chain used internally (`aptos` or `stellar`). Informational only; you do not choose this.
    </ResponseField>

    <ResponseField name="tx_hash" type="string">
      On-chain transaction hash, once settled.
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl https://api.openfi.co/v1/payments \
    -H "Authorization: Bearer $OPENFI_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "amount": 2500.00,
      "currency": "USD",
      "source": { "type": "bank_account", "id": "src_123" },
      "destination": { "type": "wallet", "address": "0xabc123..." },
      "reference": "INV-00219"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "pay_01HZX...",
    "status": "pending",
    "amount": 2500.00,
    "currency": "USD",
    "settlement": {
      "chain": "aptos",
      "tx_hash": null
    },
    "created_at": "2026-08-27T14:03:00Z"
  }
  ```
</ResponseExample>
