# Small business

Moov is your single vendor for running and managing a modern payment solution that will reduce costs for your small business.

This guide focuses on the quickest and easiest way to get started with the features of Moov we think you'll find most useful running a small business. Onboard customers to a secure payment platform, add surcharging for card transactions, send payment link QR codes, and smoothly handle refunds and disputes.

Moov offers a variety of integration options to get started. Use [Drops](/moovjs/drops/) or the [Dashboard](https://dashboard.moov.io/signin) UIs for a low to no-code solution, or choose the [API](/api/) or one of many [SDKs](/sdks/) for more complex integrations.

For the purposes of this guide, we'll provide Dashboard and API examples.

## [Onboard customers](#onboard-customers)

As you move through the onboarding process to create Moov accounts, some data is required while other data is optional. To view our full onboarding guides, visit the [Dashboard](/guides/dashboard/accounts/onboarding-links/) or main [onboarding](/guides/accounts/hosted-onboarding/) guides.

| Onboarding data      | Required |
|----------------------|----------|
| Capabilities         | **✓**    |
| Fee plan             | **✓**    |
| Scopes               | **✓**    |
| Return URL           | **×**    |
| Terms of service URL | **×**    |
| Prefilled data       | **×**    |

**Capabilities** determine what each Moov account can do, such as receiving transfers, or sending money to others. For risk and fraud protection purposes, we require detailed information when requesting capabilities. For example, we'll request more details if an account wants to collect funds than we would for an account receiving funds.

- [Transfers](/guides/accounts/capabilities/enablement/#transfers): Authorize debit transfers
- [Wallet](/guides/accounts/capabilities/enablement/#wallet): Store funds with Moov
- [Send funds](/guides/accounts/capabilities/enablement/#send-funds): Send funds to another account
- [Collect funds](/guides/accounts/capabilities/enablement/#collect-funds) (Business accounts only): Collect funds from another account

**Pricing & fee plans** can be assigned to one account or reused for many accounts. New accounts must agree to and accept the fee plan before it can go into effect. Moov offers two types of plans:

- **Cost plus:** With a cost plus plan, card networks’ interchange fees and Moov’s processing markup are passed along to the account. Cost plus plans are beneficial for accounts with a high and varied transaction volume that prefer to have more control over fees. Fees are broken down into a more digestible and transparent format.
- **Flat rate:** With a flat rate plan, you can lump all the processing fees together with a flat rate customized for each account. Flat plans are beneficial for accounts with a low transaction volume that prefer a predictable solution over lowering cost as much as possible.

**Scopes** are used to determine what can be done with the account once it's onboarded. For example, the `/accounts.read` scope provides access to view all connected user accounts and the `/accounts/{accountID}/files.read` scope provides access to view or upload files associated with a Moov account.

Read more on required data in our documentation:

[Capabilities](/guides/accounts/capabilities/) [Fee plans](/guides/fee-plans/) [Scopes](/api/authentication/scopes/)

Moov will send the [terms of service platform agreement](/guides/accounts/requirements/platform-agreement/) as part of the onboarding process through the Dashboard. Everyone with a Moov account must agree to and accept the terms of service before using Moov.

The following clip demonstrates how to create a new onboarding link in the Dashboard:

You'll need to generate and send a terms of service platform agreement as part of the onboarding process. Everyone with a Moov account must agree to and accept the terms of service before using Moov. If you're using the API, an SDK, or Moov Drops to onboard, see the [terms of service platform agreement](/guides/accounts/requirements/platform-agreement/) guide for more information and instructions.

The following is a sample request to create an [onboarding invite](/api/moov-accounts/onboarding/post/) with all available data:

```zsh
curl --X POST "https://api.moov.io/onboarding-invites" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2026.07.00" \
  --data-raw '{
    "returnURL": "https://mycompany.com/account",
    "termsOfServiceURL": "https://mycompany.com/terms-of-service",
    "scopes": [
      "accounts.read",
      "bank-accounts.read",
      "bank-accounts.write",
      "capabilities.read",
      "capabilities.write",
      "profile.read",
      "profile.write",
      "payment-methods.read",
      "transfers.read",
      "transfers.write",
      "wallets.read"
    ],
    "grantScopes": [
      "accounts.read",
      "bank-accounts.read",
      "bank-accounts.write",
      "capabilities.read",
      "capabilities.write",
      "profile.read",
      "profile.write",
      "payment-methods.read",
      "transfers.read",
      "transfers.write",
      "wallets.read"
    ],
    "capabilities": [
      "transfers",
      "wallet.balance"
    ],
    "feePlanCodes": [
      "b6134307-8922-4a72-bf3c-d0297bbe8a35"
    ],
    "prefill": {
      "mode": "production",
      "accountType": "business",
      "profile": {
        "business": {
          "legalBusinessName": "LBM Lenders LLC",
          "doingBusinessAs": "LBM Lenders",
          "businessType": "llc",
          "address": {
            "addressLine1": "123 Main Street",
            "addressLine2": "Apt 302",
            "city": "Boulder",
            "stateOrProvince": "CO",
            "postalCode": "80301",
            "country": "US"
          },
          "phone": {
            "number": "8185551212",
            "countryCode": "1"
          },
          "email": "amanda@classbooker.dev",
          "website": "www.lbmlenders.com",
          "description": "Financial institution for personal lending",
          "taxID": {
            "ein": {
              "number": "123-45-6789"
            }
          },
          "industryCodes": {
            "naics": "522291",
            "sic": "6141",
            "mcc": "6141"
          },
          "primaryRegulator": "FDIC"
        }
      },
      "metadata": {
        "property1": "string",
        "property2": "string"
      },
      "termsOfService": {
        "token": "kgT1uxoMAk7QKuyJcmQE8nqW_HjpyuXBabiXPi6T83fUKRJkA3dsFID6fzitMpm2qrOh4"
      },
      "foreignID": "4528aba-b9a1-11eb-8529-0242ac13003",
      "customerSupport": {
        "phone": {
          "number": "8185551212",
          "countryCode": "1"
        },
        "email": "amanda@classbooker.dev",
        "address": {
          "addressLine1": "123 Main Street",
          "addressLine2": "Apt 302",
          "city": "Boulder",
          "stateOrProvince": "CO",
          "postalCode": "80301",
          "country": "US"
        },
        "website": "www.lbmlenders.com"
      },
      "settings": {
        "cardPayment": {
          "statementDescriptor": "LBM Lenders"
        },
        "achPayment": {
          "companyName": "LBM Lenders"
        }
      }
    }
  }'\
```

Read more about accounts and onboarding in our documentation:

[Accounts](/guides/accounts/) [Onboarding links](/guides/dashboard/accounts/onboarding-links/)

## [Use form shortening](#use-form-shortening)

Use the [enrichment API](/api/enrichment/form-shortening/) to find publicly available information to autofill form fields based on an email address. With the enrichment API you can:

- Autocomplete addresses
- Get avatars
- Look up bank by routing number
- List industries
- Enrich business profile

If you're using a Moov.js integration, you can use Moov's pre-built Drops UI for form shortening. Read more in the Moov.js documentation:

[Moov.js](/moovjs/) [Composable Drops](/moovjs/drops/composable-drops/)

## [Send secure payment links with surcharge fees](#send-secure-payment-links-with-surcharge-fees)

Payment links are a secure way to collect payments from customers. Set up a transaction with a custom amount, or choose a product from your [catalog](/guides/account-tools/product-catalog/). You can also add tip options or a [surcharge fee](/guides/money-movement/accept-payments/card-acceptance/surcharges/) (as shown in the example).

Payment links can be shared as a URL or QR code via email, SMS, or social media. When customers click on a link, they can pay using a credit card, debit card, or bank account.

When surcharging is enabled, you must follow card brand caps, as well as federal and state regulations. See our [surcharge](/guides/money-movement/accept-payments/card-acceptance/surcharges/) guide for details on compliance, disclosures, and regulations. Note - surcharging requires a review and registration process with Moov and some card brands before it can be enabled on accounts.

To add a surcharge to a credit card transaction, go to **Checkout add-ons**, toggle surcharging on, and enter an amount.

You can also create payment links with the [API](/api/money-movement/payment-links/create/).

The example below adds a surcharge of $4.50 to cover processing costs. A surcharge is only applied to the payment link if the payment method is a credit card. Surcharges (and taxes) can be added to `amountDetails` when creating a payment link via the API.

```zsh
 curl -X POST "https://api.moov.io/accounts/{accountID}/payment-links" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2026.07.00" \
  --data-raw '{
    "accountID": "c197cd40-7745-4413-8f3b-ec962d1b5225",
    "merchantPaymentMethodID": "3afc7533-7095-43bb-b21a-5c4dc5568451",
    "amount": {
      "currency": "USD",
      "value": 16350
    },
    "amountDetails": {
      "surcharge": {
        "currency": "USD",
        "valueDecimal": "4.50"
      },
      "tax": {
        "currency": "USD",
        "valueDecimal": "9.00"
      }
    },
    "maxUses": 0,
    "expiresOn": "2026-08-24T14:15:22Z",
    "display": {
      "title": "string",
      "description": "string",
      "callToAction": "pay"
    },
    "customer": {
      "requireAddress": true,
      "requirePhone": true,
      "metadata": {
        "property1": "string",
        "property2": "string"
      }
    },
    "payment": {
      "allowedMethods": [
        "apple-pay",
        "card-payment",
        "ach-debit-collect"
      ],
      "cardDetails": {
        "dynamicDescriptor": "Monthly payment 08-26"
      },
      "achDetails": {
        "companyEntryDescription": "Monthly dues",
        "originatingCompanyName": "Quahog & Co"
      }
    }
  }'\
```

## [Facilitate in-person payments](#facilitate-in-person-payments)

Moov supports in-person payments via QR codes and Tap to Pay on iPhone and Android.

### [QR codes](#qr-codes)

QR codes are generated through the payment links process. Once a payment link has been created in the Dashboard, you'll be presented with a URL and QR code to copy and send. If you're using the API, the payment link `code` will be in the response. You can append the code to the payment link URL `https://moov.link/` and send it to customers.

The following is an example response when creating a payment link. The payment link URL with the code would be `https://moov.link/3QLHtONjd5`.

```zsh
 1{
 2  "amount": {
 3    "currency": "USD",
 4    "value": 100000
 5  },
 6  "code": "3QLHtONjd5",
 7  "createdOn": "2026-01-09T17:09:13.33Z",
 8  "customer": {
 9    "requirePhone": true
10  },
11  "display": {
12    "callToAction": "pay",
13    "description": "This is an example payment link.",
14    "title": "Example Payment Link"
15  },
16  "link": "https://moov.link/3QLHtONjd5",
17  "merchantAccountID": "34233b72-780c-4e0e-8b08-cbbe1bc878f8",
18  "merchantPaymentMethodID": "4c4e7f8e-81f4-4f3d-8f6f-6f6e7f8e4c4e",
19  "mode": "sandbox",
20  "partnerAccountID": "d290f1ee-6c54-4b01-90e6-d701748f0851",
21  "payment": {
22    "allowedMethods": [
23      "card-payment",
24      "ach-debit-collect"
25    ]
26  },
27  "status": "active",
28  "updatedOn": "2026-01-09T17:09:13.33Z",
29  "uses": 0
30}
```

You can also use the payment link `GET` [endpoint](/api/money-movement/payment-links/get-qrcode/) to retrieve the QR code.

### [Tap to Pay](#tap-to-pay)

Tap to Pay on iPhone and Android involves integrating with Moov's iOS SDK, [MoovKit](https://moovfinancial.github.io/moov-ios/documentation/moovkit/getting-started/) and Moov's [Android SDK](https://moovfinancial.github.io/moov-android/moov-android/io.moov.sdk/index.html).

[Tap to Pay on iPhone](/guides/money-movement/accept-payments/card-acceptance/tap-to-pay-iphone/) is compatible with devices that meet the following criteria:

- iPhone XS or newer
- iOS 16.0+ (US)
- Latest iOS version recommended for optimal performance

To set up Tap to Pay on iPhone, you'll need to go through the following steps:

- Initialize with [MoovKit](https://moovfinancial.github.io/moov-ios/documentation/moovkit/getting-started/)
- Request entitlement from Apple
- Review Apple's [guidelines](https://developer.apple.com/design/human-interface-guidelines/tap-to-pay-on-iphone)
- Implement a terminal configuration provider to initialize MoovKit
- Register your app with Moov
- Accept Apple's [terms and conditions](https://developer.apple.com/documentation/ProximityReader/adding-support-for-tap-to-pay-on-iphone-to-your-app#Display-the-Terms-and-Conditions-interface-to-the-merchant) per merchant identifier

[Tap to Pay on Android](/guides/money-movement/accept-payments/card-acceptance/tap-to-pay-android/#set-up-app-through-google-play) is compatible with devices that meet the following criteria:

**Operating System**

- Android 10.0 (API 29) minimum
- Google Play Services v11+
- Official Android release

**Hardware Features**

- Active NFC antenna
- ARM processor architecture
- Secure element for key storage
- Unmodified manufacturer firmware

**Security Status**

- Passes Google Play Integrity verification
- No root access detected
- Original bootloader intact
- Accurate system time

To set up Tap to Pay on Android, you'll need to go through the following steps:

- Set up your app through Google Play
- Register your app with Moov
- Initialize with [Android SDK](https://moovfinancial.github.io/moov-android/moov-android/io.moov.sdk/index.html)

## [Handle reversals & refunds](#handle-reversals--refunds)

Moov's reversal process offers a robust solution for returning funds to a cardholder, regardless of the current state of the transfer. When possible, a reversal cancels the transfer, reversing the authorization and swiftly returning funds. If a reversal is not possible, a refund is initiated instead.

Moov automatically moves your request into the reversal or refund flow depending on settlement status and type, such as a full or partial refund.

For ACH transfers, depending on settlement status, you also have the option of cancelling the ACH transfer directly. If a transfer is cancelable, you will have a **Cancel** option within the Dashboard.

Read more about reversals, refunds, and cancellations in our documentation:

[Reversals in the Dashboard](/guides/dashboard/transfers/all-transfers/#initiate-a-reversal-refund-or-cancellation) [Reversals](/guides/money-movement/accept-payments/card-acceptance/reversals/) [ACH cancellations](/guides/money-movement/accept-payments/ach/cancellations/) [Reversals API](/api/money-movement/refunds/cancel/)

## [Handle disputes](#handle-disputes)

The Dashboard will notify you of any disputes that come in and the deadline in which they will need to be handled. You can choose to accept the dispute and facilitate a refund, or challenge the dispute by submitting evidence.

Within the Dashboard, you can view, accept, challenge, delete, and update disputes, as well as view, upload, and update dispute evidence. Moov currently supports RDR (Visa Rapid Dispute Resolution) decisioned pre-disputes and chargebacks from all card networks.

To accept the dispute, click the **Refund** button and follow the refund procedure.

If you challenge the dispute, the Dashboard will guide you through uploading and submitting evidence, such as proof of purchase or terms of service.

Read more about disputes in our documentation:

[Card disputes](/guides/money-movement/accept-payments/card-acceptance/disputes/) [Disputes in the Dashboard](/guides/dashboard/transfers/disputes/) [Disputes API](/api/money-movement/disputes/).

## [Other resources](#other-resources)

[Test mode](/guides/get-started/test-mode/) [Dashboard](/guides/dashboard/) [Webhooks](/guides/webhooks/) [API](/api/) [SDKs](/sdks/)
