Underwriting

Underwriting is Moov's risk assessment process that lets us safely enable payment capabilities for accounts on your platform.

As a payment processor, Moov is required to do due diligence and understand an account's business model, transaction patterns, and risk profile before enabling money movement capabilities. Through underwriting, we can understand and prevent unnecessary financial risk while ensuring high-volume established businesses have adequate processing thresholds.

Quick start

Underwriting is required for all capabilities except transfers. Here's what you need to know:

  1. Request capabilities → Moov returns the baseline required underwriting fields
  2. Submit underwriting data → Use the underwriting API
  3. Re-check capabilities → Additional requirements may appear based on the submitted values
  4. Repeat until no requirements remain → Once all requirements are met, capabilities are enabled

Most approvals are instant. Some high-volume or high-risk profiles may take up to two business days.

How requirements work

Underwriting requirements are tiered based on the account's business profile. This means low-volume, US-only businesses have minimal requirements, while higher-volume or international businesses need to provide more detail.

Baseline requirements (all capabilities)

Every capability requires these two fields:

Field Description Values
geographicReach Where are the account's customers located? us-only, us-and-international, international-only
monthlyVolumeRange Estimated monthly transaction volume for the capability See volume ranges
Fast path: If geographicReach is us-only AND monthlyVolumeRange is under-10k, these are the only fields required for most capabilities.

Extended requirements

These fields are required when either of the following is true:

  • monthlyVolumeRange is greater than under-10k
  • geographicReach is us-and-international or international-only
Field Description Format
businessPresence How does the business operate? See business presence types
volumeShareByCustomerType Percentage of transactions that are B2B vs B2C vs P2P Object with business, consumer, p2p (must total 100)
pendingLitigation Current or pending legal matters See pending litigation
averageTransactionAmount Average transaction size in USD Integer (per capability)
maximumTransactionAmount Maximum transaction size in USD Integer (per capability)

Card payment requirements

The collect-funds.card-payments capability has additional requirements:

Condition Additional fields required
All card merchants currentlyAcceptsCards, cardAcceptanceMethods
Card-not-present merchants (inPersonPercentage < 80%) fulfillment, refundPolicy
Currently accepts cards (currentlyAcceptsCards = true) Upload processing statements via files API

Capabilities reference

All capabilities follow the same tiered requirement structure. The table below shows available capabilities:

Capability Description
Collect funds
collect-funds.ach Pull funds via ACH debit
collect-funds.card-payments Accept cards and digital wallets (e.g. Apple/Google Pay)
Send funds
send-funds.ach Push funds via ACH credit (standard or same-day)
send-funds.push-to-card Instant disbursement via Visa Direct or Mastercard Send
send-funds.instant-bank Instant bank transfers via RTP & FedNow
Money transfer
money-transfer.pull-from-card Pull funds from debit/prepaid cards for me-to-me account funding or person-to-person
money-transfer.push-to-card Push funds to debit/prepaid cards for me-to-me transfers or person-to-person

API workflow

Check requirements

Use the capabilities API to see what's required. Underwriting fields are prefixed with underwriting.:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "capability": "collect-funds.card-payments",
  "status": "pending",
  "requirements": {
    "currentlyDue": [
      "underwriting.geographicReach",
      "underwriting.collectFunds.cardPayments.estimatedActivity.monthlyVolumeRange"
    ]
  }
}

Submit underwriting data

Use the underwriting POST endpoint to submit data:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "geographicReach": "us-only",
  "collectFunds": {
    "cardPayments": {
      "estimatedActivity": {
        "monthlyVolumeRange": "under-10k"
      }
    }
  }
}
The POST endpoint is required for API versions v2025.07.00 and later.

Check for additional requirements

Re-query capabilities after each submission. New requirements may appear based on the submitted values:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
  "capability": "collect-funds.card-payments",
  "status": "pending",
  "requirements": {
    "currentlyDue": [
      "underwriting.pendingLitigation",
      "underwriting.businessPresence",
      "underwriting.volumeShareByCustomerType",
      "underwriting.collectFunds.cardPayments.estimatedActivity.averageTransactionAmount",
      "underwriting.collectFunds.cardPayments.estimatedActivity.maximumTransactionAmount"
    ]
  }
}

Repeat until complete

Continue submitting data until currentlyDue is empty and status changes to enabled.

Full example

This example onboards a merchant requesting collect-funds.ach and collect-funds.card-payments.

Request capabilities

1
2
3
4
5
6
7
8
9
curl -X POST "https://api.moov.io/accounts/{accountID}/capabilities" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "capabilities": [
      "collect-funds.ach",
      "collect-funds.card-payments"
    ]
  }'

Response: Initial requirements for both capabilities:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[
  {
    "capability": "collect-funds.ach",
    "status": "pending",
    "requirements": {
      "currentlyDue": [
        "underwriting.geographicReach",
        "underwriting.collectFunds.ach.estimatedActivity.monthlyVolumeRange"
      ]
    }
  },
  {
    "capability": "collect-funds.card-payments",
    "status": "pending",
    "requirements": {
      "currentlyDue": [
        "underwriting.geographicReach",
        "underwriting.collectFunds.cardPayments.estimatedActivity.monthlyVolumeRange"
      ]
    }
  }
]

Submit baseline underwriting

Submit geographic reach and volume estimates:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
{
  "geographicReach": "us-only",
  "collectFunds": {
    "ach": {
      "estimatedActivity": {
        "monthlyVolumeRange": "under-10k"
      }
    },
    "cardPayments": {
      "estimatedActivity": {
        "monthlyVolumeRange": "10k-50k"
      }
    }
  }
}

Result: ACH is approved (low volume, US-only). Card payments triggers extended requirements because volume exceeds under-10k:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[
  {
    "capability": "collect-funds.ach",
    "status": "enabled",
    "requirements": {}
  },
  {
    "capability": "collect-funds.card-payments",
    "status": "pending",
    "requirements": {
      "currentlyDue": [
        "underwriting.pendingLitigation",
        "underwriting.businessPresence",
        "underwriting.volumeShareByCustomerType",
        "underwriting.collectFunds.cardPayments.estimatedActivity.averageTransactionAmount",
        "underwriting.collectFunds.cardPayments.estimatedActivity.maximumTransactionAmount",
        "underwriting.collectFunds.cardPayments.currentlyAcceptsCards",
        "underwriting.collectFunds.cardPayments.cardAcceptanceMethods"
      ]
    }
  }
]

Submit extended requirements

Complete all remaining requirements:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
  "pendingLitigation": "none",
  "businessPresence": "online-only",
  "volumeShareByCustomerType": {
    "business": 80,
    "consumer": 20,
    "p2p": 0
  },
  "collectFunds": {
    "cardPayments": {
      "estimatedActivity": {
        "averageTransactionAmount": 150,
        "maximumTransactionAmount": 1000
      },
      "currentlyAcceptsCards": true,
      "cardAcceptanceMethods": {
        "inPersonPercentage": 10,
        "onlinePercentage": 90,
        "mailOrPhonePercentage": 0
      },
      "fulfillment": {
        "method": "shipped-physical-goods",
        "timeframe": "within-7-days"
      },
      "refundPolicy": "full-refund-within-30-days"
    }
  }
}

Upload documents (if required)

If the merchant currently accepts cards, upload processing statements:

1
2
3
4
curl -X POST "https://api.moov.io/accounts/{accountID}/files" \
  -H "Authorization: Bearer {token}" \
  -F "file=@/path/to/processing-statement.pdf" \
  -F "filePurpose=underwriting"

Reference

Use the following sections as a reference for various parts of the underwriting process.

Volume ranges

Select the range that matches the account's expected monthly transaction volume for monthlyVolumeRange:

Value Range
under-10k Less than $10,000
10k-50k $10,000 – $50,000
50k-100k $50,000 – $100,000
100k-250k $100,000 – $250,000
250k-500k $250,000 – $500,000
500k-1m $500,000 – $1,000,000
1m-5m $1,000,000 – $5,000,000
over-5m Over $5,000,000

Business presence types

Select the option that best describes how the business operates for businessPresence:

Value Description
commercial-office Traditional office space
retail-storefront Physical retail location
home-based Operated from residential address
online-only No physical customer interaction
mobile-business Service provider that travels to customers
mixed-presence Combination of physical and online

Pending litigation

Select the option that applies to current or pending legal matters for pendingLitigation:

Value Description
none No current or pending litigation
government-enforcement-or-investigation Regulatory investigations or enforcement actions
fraud-or-financial-crime Allegations of fraud or financial misconduct
consumer-protection-or-class-action Consumer complaints or class action suits
data-breach-or-privacy Data security or privacy violations
bankruptcy-or-insolvency Financial distress proceedings
employment-or-workplace-disputes Employee-related legal issues
personal-injury-or-medical Injury or medical malpractice claims
intellectual-property Patent, trademark, or copyright disputes
other Other significant legal matters

Card acceptance

Indicate whether the business currently accepts card payments for currentlyAcceptsCards:

Value Description
true Business currently accepts card payments (requires uploading processing statements)
false Business does not currently accept card payments

Card acceptance methods

Describe the distribution of card transactions by payment channel for cardAcceptanceMethods. All three percentages must total 100:

Field Description
inPersonPercentage Percentage of transactions where the card is present (POS, tap-to-pay)
onlinePercentage Percentage of transactions from online/ecommerce channels
mailOrPhonePercentage Percentage of transactions via mail order or phone order (MOTO)

Example:

1
2
3
4
5
6
7
{
  "cardAcceptanceMethods": {
    "inPersonPercentage": 10,
    "onlinePercentage": 85,
    "mailOrPhonePercentage": 5
  }
}
If inPersonPercentage is less than 80%, fulfillment and refundPolicy details are also required.

Fulfillment

For card-not-present merchants, provide details on how goods or services are delivered. The fulfillment object contains two fields:

Field Description
method How the account's customers receive their purchase — see method values below
timeframe When the account's customers typically receive their purchase — see timeframe values below

Example:

1
2
3
4
5
6
{
  "fulfillment": {
    "method": "shipped-physical-goods",
    "timeframe": "within-7-days"
  }
}

Fulfillment methods

Select how the account's customers receive goods or services for fulfillment.method:

Value Description
shipped-physical-goods Items shipped via carrier
local-pickup-or-delivery Customer pickup or local delivery
digital-content Downloads, streaming, digital products
in-person-service Service provided at business location
remote-service Service provided remotely/virtually
donation Charitable contributions
bill-or-debt-payment Utility bills, loan payments, etc.
subscription-or-membership Recurring access or services
other Custom fulfillment method

Fulfillment timeframes

Select when the account's customers typically receive their purchase for fulfillment.timeframe:

Value Description
immediate Instant delivery (digital goods, in-person services)
within-7-days Standard shipping timeframe
within-30-days Extended delivery window
over-30-days Long-term delivery (custom orders, pre-orders)
scheduled-event Delivery tied to specific event date
recurring-schedule Ongoing subscription deliveries
pre-order Payment before product availability
other Custom timeframe

Refund policy options

Select the option that describes the business's refund policy for refundPolicy:

Value Description
no-refunds All sales final
full-refund-within-30-days Standard 30-day return window
full-refund-extended-window Returns accepted beyond 30 days
partial-refund Reduced refund amount (restocking fees, etc.)
store-credit-only Refunds as store credit/gift cards only
prorated-refund Refund amount based on usage/time
conditional-refund Refunds under specific conditions only
event-based-policy Refunds tied to event cancellation/rescheduling
custom-policy Unique refund terms
Summary Beta