Field Validation Rules
Before a submitted merchant onboarding application reaches a Bead reviewer, it is run through a set of automated field-level checks. These are the same checks Bead's own review tooling runs internally — validating your payload against them before submission catches the most common causes of review delay before they ever reach us.
This page documents every rule currently enforced, grouped by category. Each rule lists what it checks, why it exists, and how to fix a failure.
Tip: Most failures on this list are cheap to catch client-side with a regex or a lookup table. If you're building an integration against the Onboarding API, we recommend running these checks against your payload before calling
POST /merchant-onboarding/applicationsorPOST /merchant-onboarding/applications-short.
How to read this page
Each rule below maps to a specific field or field pattern in the Merchant Onboarding Schema. Fields are referenced using their path in the request payload, for example merchantData.stakeholders[].phoneNumber.
Phone numbers
Phone number can normalize to E.164
Every phone number field must be cleanly convertible to E.164 format (+15551234567).
Applies to:
mainPointOfContact.phoneNumber,stakeholders[].phoneNumber,businessPhone,signerPhone(short application)Fix: Strip formatting characters and confirm the number resolves to a valid
+-prefixed E.164 string before sending.
Phone number can convert from E.164 to E.123
Every phone number field must convert from its normalized E.164 form into the downstream E.123 international format (+1 480 332 1255).
Applies to: Same fields as above.
Fix: This is a downstream consequence of the E.164 check — if a number passes E.164 normalization but fails E.123 conversion, it usually indicates an unusual or malformed national number. Re-verify the number with the merchant.
Phone number includes US country code
Phone numbers should include an explicit US country code (+1).
Applies to: Same fields as above.
Fix: Always send the leading
+1rather than a bare 10-digit number.
Contact formatting
Email is properly formatted
Every email field must be a valid, well-formed email address.
Applies to:
mainPointOfContact.email,stakeholders[].email,businessEmail,signerEmailFix: Validate against a standard email regex or library before submission. Watch for trailing whitespace and copy-paste artifacts from CRM exports.
Website is properly formatted
Every website field must be a valid http or https URL.
Applies to:
businessWebsiteFix: Include the protocol (
https://…). A bare domain without a scheme will fail.
Identity and compliance
Date of birth is 10+ years old
Every stakeholder date of birth must be at least 10 years before today.
Applies to:
stakeholders[].dateOfBirthFix: Confirm the date isn't transposed (day/month swap is the most common cause) and that it isn't accidentally defaulting to the current date.
SSN uses valid US ranges
An SSN used as a tax ID must be 9 digits, with:
area number not
000,666, or in the900–999rangegroup number not
00serial number not
0000Applies to:
stakeholders[].taxIdNumberwhentaxIdTypeisssnFix: These ranges were never issued by the SSA and indicate placeholder, test, or transposed data. Confirm the value with the stakeholder rather than guessing a fix. Remember the field must also be exactly 9 digits with no dashes — see Merchant Onboarding Schema.
Business EIN differs from stakeholder tax ID
The business federalTaxId (EIN) must not match any stakeholder's taxIdNumber.
Applies to:
federalTaxIdcompared against everystakeholders[].taxIdNumberFix: This usually indicates the business EIN was copy-pasted into a stakeholder record, or vice versa. Confirm each identifier was pulled from the correct source field.
Address
Street 1 or address 1 is populated
Every address object must include address1 (or the equivalent street line) with more than 5 characters.
Applies to:
registeredLegalAddress,businessMailingAddress,stakeholders[].address,bankAddressFix: A PO Box abbreviation or single-character placeholder will fail this check. Confirm a real street line is present.
Postal code has 5+ digits
Every address object must include a postal or zip code with at least 5 digits.
Applies to: Same address objects as above.
Fix: Confirm the field isn't truncated (e.g., a leading zero dropped by a spreadsheet import).
State is 2 characters
Every address object must include a 2-letter state or region code.
Applies to:
regionfield on the same address objects.Fix: Send USPS 2-letter abbreviations (
MA, notMassachusetts).
Country is US only
Every address object must have country set to US.
Applies to: Same address objects as above.
Fix: Bead onboarding currently supports US-domiciled merchants only. Confirm
countryis the literal stringUS, not a full country name.
Citizenship and issuance country are US
Every stakeholder citizenship and countryOfIssuance field must be set to US.
Applies to:
stakeholders[].citizenship,stakeholders[].countryOfIssuanceFix: As with address country, this must be the ISO alpha-2 code
US.
Classification codes
NAICS is a current 2022 code
naicsCode must be a current 2022, 6-digit NAICS code.
Applies to:
naicsCodeFix: Legacy 2- or 4-digit NAICS codes (from older classification revisions) will fail. Look up the current 6-digit 2022 code for the merchant's business activity — the U.S. Census NAICS lookup tool is the canonical source. This is the single most common validation failure seen in review.
MCC is 4 digits
merchantCategoryCode must be a valid 4-digit number and cannot be all zeros or all nines.
Applies to:
merchantCategoryCode,additionalMerchantCategoryCodeFix: Send as a string to preserve leading zeros (see Common Field Types), and confirm the value isn't a placeholder like
0000or9999.
Attachments
Attachments are PDF only
All application attachments must be PDF files.
Applies to: Files uploaded through the Application Attachments endpoints.
Fix: Convert scanned images or Office documents to PDF before upload. Other formats will be rejected at upload time or flagged in review.
Pricing and tenders
Tender pricing has both percentage and transaction rates
Bitcoin and USDC pricing must be present, and each configured tender must include both a percentage fee rate and a transaction fee rate.
Applies to:
feeInformation.bitcoinFee,feeInformation.stablecoinFeeFix: Both
transactionRateandperItemFeesub-objects are required for each configured tender — confirm neither was omitted when buildingfeeInformation. See Fee Configuration for Onboarding Applications.
Partner-enabled wallets have pricing configured
Any wallet tender enabled at the partner level must have a corresponding entry in feeInformation.digitalWalletsFees. This is a warning-level check, not a hard failure.
Applies to:
feeInformation.digitalWalletsFeesFix: Cross-check the merchant's enabled wallet tenders against your partner-level tender configuration and add any missing pricing entries.
Settlement-only applications
Settlement-only applications omit disallowed revenue and ticket fields
When isSettlementOnly is true, the application must not include grossAnnualRevenue, highestMonthlyVolume, averageTicketSize, or maxTicketSize.
Applies to:
grossAnnualRevenue,highestMonthlyVolume,averageTicketSize,maxTicketSizewhenisSettlementOnlyistrueFix: Omit these fields entirely from the payload for settlement-only merchants rather than sending zero or null values.
Related pages
Last updated