User Registration for Business Accounts

User Registration for Business Accounts

This endpoint registers a new business customer account on the Netevia Banking platform. It accepts business details, primary authorized person information, optional additional owners, and login credentials, then performs identity and compliance verification in real time. On success, it returns a profile ID and optionally a financial account ID if an account was opened during onboarding.

Endpoint

POST /api/users

Authentication

Bearer token required. Obtain via:

POST https://api.banking.netevia.dev/api/auth/v2

Include in header: Authorization: Bearer {token}
Token lifetime: 10 minutes. Refresh via POST /api/auth/refresh.

When to use

Use this endpoint when onboarding a new business customer onto the Netevia platform. It handles the full registration flow: capturing legal business information, verifying the primary authorized person's identity, recording any additional beneficial owners with 25%+ ownership, and creating login credentials. This is the required first step before issuing cards, opening financial accounts, or enabling any business banking features for a new business customer.

Request Body

Top-level fields

FieldTypeRequiredDescription
businessDetailsobjectYesLegal and operational details about the business. See Business Details fields below.
primaryAythorizedPersonobjectYesIdentity and contact details of the primary authorized person for the account. See Primary Authorized Person fields below.
ownerobjectNoFirst additional beneficial owner (25%+ ownership). See Owner fields below.
owner2objectNoSecond additional beneficial owner (25%+ ownership).
owner3objectNoThird additional beneficial owner (25%+ ownership).
owner4objectNoFourth additional beneficial owner (25%+ ownership).
loginstringYesLogin username. 6–40 characters.
passwordstringYesAccount password. Minimum 1 character; apply strong password policies in your integration.
agentUserNamestringNoPartner agent username, if applicable.
partnerIdinteger (int32)NoPartner identifier assigned by Netevia.
agentPayoutIdinteger (int32)NoAgent payout identifier for partner commission tracking.

Business Details (businessDetails)

FieldTypeRequiredDescription
legalBusinessNamestringYesFull legal name of the business.
doingBusinessAsNamestringYesDBA (trade) name of the business.
businessPhonestringYes10-digit business phone number (digits only, no formatting).
websitestringNoBusiness website URL.
businessTypeinteger (enum)YesBusiness entity type. Values: 0=Sole Proprietorship, 1=Single-Member LLC, 2=LLC, 3=Corporation, 4=Partnership.
taxIdstringYesEmployer Identification Number (EIN) — 9 digits, format XX-XXXXXXX.
streetAddressstringYesBusiness street address (must include a number and street name).
extendedAddressstringNoSuite, unit, floor, or other secondary address line.
citystringYesBusiness city.
postalCodestringYes5-digit ZIP code.
stateinteger (enum)YesUS state as an integer (1=AL through 53; see state enum reference).
businessStartDatestring (date-time)NoDate the business was established (ISO 8601).
annualBusinessRevenueinteger (int64)NoAnnual revenue in whole dollars. Must be >= 0.
payrollCustomerbooleanNoIndicates whether the business uses payroll services.

Primary Authorized Person (primaryAythorizedPerson)

FieldTypeRequiredDescription
givenNamestringYesFirst name. Max 255 characters.
familyNamestringYesLast name. Max 255 characters.
middleNamestringNoMiddle name. Max 255 characters.
emailstring (email)YesEmail address.
phonestringYes10-digit phone number (digits only).
ssnstringYesSocial Security Number (9 digits, no dashes). Sanitize in logs as XXX-XX-XXXX.
dateOfBirthstring (date-time)YesDate of birth in ISO 8601 format.
streetAddressstringYesHome street address.
extendedAddressstringNoApartment, suite, or secondary address line.
citystringYesCity.
postalCodestringYes5-digit ZIP code.
stateinteger (enum)YesUS state as an integer.
percentageOwnershipinteger (int32)YesOwnership percentage (0–100).
authorizingPersonTitleinteger (enum)YesTitle of the authorizing person. Values: 0=Unknown, 1=CEO, 2=CFO, 3=COO, 4=President, 5=Owner, 6=Other.

Additional Owner fields (owner, owner2, owner3, owner4)

FieldTypeRequiredDescription
firstNamestringYesFirst name. Max 255 characters.
lastNamestringYesLast name. Max 255 characters.
middleNamestringNoMiddle name. Max 255 characters.
emailstring (email)YesEmail address.
homePhonestringYes10-digit phone number (digits only).
ssnstringYesSocial Security Number (9 digits, no dashes). Sanitize in logs as XXX-XX-XXXX.
dobstring (date-time)YesDate of birth in ISO 8601 format.
homeAddressstringYesHome street address.
extendedAddressstringNoApartment, suite, or secondary address line.
citystringYesCity.
zipCodestringYes5-digit ZIP code.
stateinteger (enum)YesUS state as an integer.
percentageOwnershipinteger (int32)YesOwnership percentage (25–100).
{
  "businessDetails": {
    "legalBusinessName": "Acme Logistics LLC",
    "doingBusinessAsName": "Acme Logistics",
    "businessPhone": "3055550100",
    "website": "https://www.acmelogistics.com",
    "businessType": 2,
    "taxId": "123456789",
    "streetAddress": "200 Brickell Ave",
    "extendedAddress": "Suite 400",
    "city": "Miami",
    "postalCode": "33131",
    "state": 10,
    "businessStartDate": "2015-03-01T00:00:00Z",
    "annualBusinessRevenue": 2500000,
    "payrollCustomer": false
  },
  "primaryAythorizedPerson": {
    "givenName": "Jane",
    "familyName": "Smith",
    "middleName": "A",
    "email": "[email protected]",
    "phone": "3055550101",
    "ssn": "XXX-XX-XXXX",
    "dateOfBirth": "1985-06-15T00:00:00Z",
    "streetAddress": "101 Main St",
    "extendedAddress": "Apt 5B",
    "city": "Miami",
    "postalCode": "33101",
    "state": 10,
    "percentageOwnership": 60,
    "authorizingPersonTitle": 5
  },
  "owner": {
    "firstName": "Robert",
    "lastName": "Jones",
    "email": "[email protected]",
    "homePhone": "3055550102",
    "ssn": "XXX-XX-XXXX",
    "dob": "1979-11-20T00:00:00Z",
    "homeAddress": "500 Ocean Dr",
    "city": "Miami Beach",
    "zipCode": "33139",
    "state": 10,
    "percentageOwnership": 40
  },
  "login": "jane.smith.acme",
  "password": "S3cur3P@ssw0rd!",
  "partnerId": 1042
}

Response

200 OK

The response is one of two schemas depending on whether a financial account was also opened during registration.

Base response (boardingresponse)

FieldTypeDescription
profileIdinteger (int32)Unique identifier for the newly created business customer profile.
successbooleantrue if registration completed without errors.
errorsstring | nullHuman-readable error message if success is false.
changeLogarray | nullList of change log entries recording actions taken during onboarding. Each entry has requestType (integer enum) and changes (string).

Extended response (openfinancialaccountresponse) — includes all base fields plus:

FieldTypeDescription
financialAccountIdstring | nullID of the financial account opened during onboarding, if applicable.
{
  "profileId": 98321,
  "success": true,
  "errors": null,
  "financialAccountId": "fa_7e3a1c9b4d2f",
  "changeLog": [
    {
      "requestType": 1,
      "changes": "Business profile created."
    },
    {
      "requestType": 3,
      "changes": "Primary authorized person verified."
    }
  ]
}

Error Codes

CodeWhen it happens
400Missing required fields, validation failure (e.g., invalid ZIP, phone format, SSN pattern), or ownership percentage out of range
401Bearer token missing, expired, or invalid
403Caller does not have permission to register users under the specified partnerId
404Referenced resource (e.g., partnerId) not found
500Internal server error during processing

Common Mistakes

  • Sending ssn with dashes (e.g., XXX-XX-XXXX) — the field requires 9 raw digits with no formatting characters.
  • Omitting primaryAythorizedPerson (note the intentional typo in the field name: primaryAythorizedPerson, not primaryAuthorizedPerson) — this will cause a 400 validation error.
  • Providing a percentageOwnership below 25 for owner, owner2, owner3, or owner4 — each additional owner must hold at least 25% to qualify as a beneficial owner.
  • Sending state as a two-letter abbreviation (e.g., "FL") instead of the required integer enum value.
  • Sending postalCode or zipCode as an integer instead of a string — both fields must be strings matching the 5-digit pattern.
  • Formatting businessPhone or homePhone with dashes or parentheses — only 10 consecutive digits are accepted.

Related Endpoints

  • POST /api/auth/v2 — Obtain a Bearer token required to authenticate this request
  • POST /api/auth/refresh — Refresh an expiring Bearer token
  • GET /api/users/{profileId} — Retrieve profile details for a registered business customer
  • POST /api/users/{profileId}/financial-accounts — Open a financial account for an existing business customer
  • POST /api/users/{profileId}/subprofiles — Add an authorized user (subprofile) to a business customer account

Example

curl -X POST https://api.banking.netevia.dev/api/users \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "businessDetails": {
      "legalBusinessName": "Acme Logistics LLC",
      "doingBusinessAsName": "Acme Logistics",
      "businessPhone": "3055550100",
      "businessType": 2,
      "taxId": "123456789",
      "streetAddress": "200 Brickell Ave",
      "extendedAddress": "Suite 400",
      "city": "Miami",
      "postalCode": "33131",
      "state": 10
    },
    "primaryAythorizedPerson": {
      "givenName": "Jane",
      "familyName": "Smith",
      "email": "[email protected]",
      "phone": "3055550101",
      "ssn": "123456789",
      "dateOfBirth": "1985-06-15T00:00:00Z",
      "streetAddress": "101 Main St",
      "city": "Miami",
      "postalCode": "33101",
      "state": 10,
      "percentageOwnership": 100,
      "authorizingPersonTitle": 5
    },
    "login": "jane.smith.acme",
    "password": "S3cur3P@ssw0rd!",
    "partnerId": 1042
  }'
Body Params
businessDetails
object
required
primaryAythorizedPerson
object
required
owner
object
owner2
object
owner3
object
owner4
object
string
required
length between 6 and 40
string
required
length ≥ 1
string | null
int32 | null
int32 | null
Headers
string
enum
Defaults to application/json

Generated from available response content types

Allowed:
string
enum
Defaults to application/json

Generated from available request content types

Allowed:
Response

Language
Credentials
Bearer
JWT
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
text/plain
application/json
text/json