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

# Collect Vendor Bank Details

> Let vendors add their own payment details on a secure form — you never touch their bank account numbers

Asking vendors to email you a voided check or a bank letter is slow and risky. Instead, have Nickel collect their details: you trigger a request, the vendor fills in a secure hosted form, and their delivery method appears on the vendor record — without their account number ever passing through your systems.

<Info>
  **Before you start**: You need a vendor (see [Pay a Vendor Bill](/guides/pay-a-bill)) and a [webhook subscription](/guides/receive-webhooks) to hear when the vendor completes the form.
</Info>

<Steps>
  <Step title="Send the request">
    Call [`POST /vendor/{vendorId}/requestDeliveryDetails`](/api-reference/vendor-delivery-method/request-delivery-details-from-a-vendor). Nickel emails the addresses you pass — or the vendor's emails on file if you omit `emails` — a link to the secure form:

    ```bash theme={null}
    curl -X POST https://rest.staging.nickel.com/vendor/cmra1j4un00013u02spto0xz7/requestDeliveryDetails \
      -H "Authorization: Bearer $NICKEL_SANDBOX_KEY" \
      -H "Content-Type: application/json" \
      -d '{"emails": ["billing@brooklynpapersupply.com"]}'
    ```

    ```json theme={null}
    {
      "url": "https://nickel.staging.nickelpayments.com/vendor?token=eyJhbGciOi..."
    }
    ```

    The returned `url` is the same form the email links to — share it directly over your own channel if you prefer. The link is vendor-specific and expires, so request a fresh one rather than storing it.
  </Step>

  <Step title="The vendor fills in the form">
    The vendor chooses how they want to be paid — bank account for ACH, mailing address for checks — and submits. Nothing to build or host on your side.
  </Step>

  <Step title="Get notified">
    When the vendor submits, your webhook receives `vendor.payout_method_updated` with the vendor's ID in `associated_object_id`. Fetch the vendor and read the new delivery method:

    ```bash theme={null}
    curl https://rest.staging.nickel.com/vendor/cmra1j4un00013u02spto0xz7 \
      -H "Authorization: Bearer $NICKEL_SANDBOX_KEY"
    ```

    ```json theme={null}
    {
      "id": "cmra1j4un00013u02spto0xz7",
      "name": "Brooklyn Paper Supply",
      "vendorDeliveryMethods": [
        {
          "id": "cmra1jcxw00033u02rdotftsr",
          "type": "ACH",
          "routingNumber": "101050001",
          "accountType": "checking",
          "bankName": "First Bank of the United States",
          ...
        }
      ],
      ...
    }
    ```

    Full account numbers are never returned — the delivery method carries only what you need to recognize and use it.

    <Warning>
      `vendor.payout_method_updated` fires on **both** create and update. If a vendor corrects their details, the delivery method changes — always refetch the vendor rather than caching `vendorDeliveryMethods[].id` from months ago.
    </Warning>
  </Step>

  <Step title="Pay them">
    Use the `vendorDeliveryMethods[].id` as the `vendorDeliveryMethodId` in [`POST /bill/pay`](/api-reference/bill/pay-bills) — pick up [Pay a Vendor Bill](/guides/pay-a-bill) at the "Create the bill" step.
  </Step>
</Steps>

## Where to go next

<Columns cols={2}>
  <Card title="Pay a vendor bill" href="/guides/pay-a-bill" icon="money-bill-transfer">
    The end-to-end payable flow this plugs into.
  </Card>

  <Card title="Receive webhooks" href="/guides/receive-webhooks" icon="bolt">
    The receiver that hears vendor.payout\_method\_updated.
  </Card>
</Columns>
