Statement descriptors

Learn how to customize statement descriptors on card payments.

Statement descriptors are the text that describe transactions presented to us by our digital banking feeds (or paper statements) so that we can recognize them. Setting clear statement descriptors can help to reduce disputes and improve the user experience by providing context on what the payment was for.

For card payments, Moov will use the statement descriptor added at the transfer or account level. Otherwise, Moov will default to the DBA or legal business name of the Moov account truncated based on payment network limits.

Account level statement descriptor

You can set the default statement descriptor for a merchant by using the account.settings.cardPayment.statementDescriptorfield in the PATCH accounts endpoint. In the example provided, we set a statement descriptor for a local gym called “Whole Body Fitness” at the accoutn level.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
curl -X PATCH "https://api.moov.io/accounts" \
  -H 'Authorization: Bearer {token}' \
  -H "Content-Type: application/json" \
  -H "Origin: https://api.moov.io" \
  --data-raw '{
    "profile": {
      "business": {
        "legalBusinessName": "Whole Body Fitness LLC",
        "businessType": "llc",
      }
    },  
    "settings": {
      "cardPayment": {
        "statementDescriptor": "Whole Body Fitness",
      }
    },
    "foreignId": "your-correlation-id",
  }'\
1
2
3
4
5
6
7
8
9
const moov = new Moov(credentialsObject);

const account = await moov.accounts.patch({
  "settings": {
    "cardPayment": {
      "statementDescriptor": "Whole Body Fitness",
    }
  }
})
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
const moov = Moov(token);

const updatedAccount = {
  "accountType": "business",
  "profile": {
    "business": {
      "legalBusinessName": "ClassBooker",
      "businessType": "llc",
      "settings": {
        "cardPayment": {
          "statementDescriptor": "Whole Body Fitness",
        }
      }
    }
  } 
};
moov.accounts.update(updatedAccount);

Transfer level statement descriptor

Optionally, source.cardDetails.dynamicDescriptor in the CREATE transfer endpoint allows a merchant to pass information to the card issuer at the time of transaction. The card issuer will then use this information to generate a description of the cardholder’s statement. In the example provided, we set a dynamic statement descriptor that captures the date of a yoga class at Whole Body Fitness.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
curl -X POST "https://api.moov.io/transfers" \
  -H 'Authorization: Bearer {token}' \
  -H "Origin: https://api.moov.io" \
  -H "X-Wait-For: rail-response" \
  --data-raw '{
    "source": {
      "paymentMethodID": "UUID",
      "cardPayment": {
        "statementDescriptor": "WhlBdy *Yoga 11-12",
      },
    },
    "destination": {
      "paymentMethodID": "UUID",
    },
    "amount": {
      "value": 100,
      "currency": "USD"
    },
    "description": "Paying Jules for last 4 classes"
  }'\
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
const moov = new Moov(credentialsObject);

const transfer = await moov.transfers.create({
  source: {
    paymentMethodID: "source-payment-method-id",
  },
  cardPayment: {
    statementDescriptor: "WhlBdy *Yoga 11-12",
  },
  destination: {
    paymentMethodID: "destination-payment-method-id",
  },
  amount: {
    value: 100,
    currency: "USD"
  },
});