Identity API

Create bank account for firm

Creates a new bank account for a firm scoped to the authenticated customer. Returns the created record with the account number masked.

post

Path Parameters

firmIdstring(uuid)required

ID of the firm

Body

application/json

CreateBankAccountRequest

typestringrequired

The type of bank account

Allowed values:SAVINGSCHECKING

Example:CHECKING

holderNamestringrequired

Name of the account holder

Example:Jane Doe

numberstringrequired

Bank account number (4-17 characters)

>= 4 characters<= 17 characters

Example:1234567890

routingNumberstringrequired

Bank routing number (exactly 9 digits)

>= 9 characters<= 9 characters

Example:021000021

bankNamestringrequired

Name of the bank

Example:Chase Bank

nicknamestring

Optional nickname for the bank account

Example:Main

primaryAccountboolean | null

Whether this should become the owner’s primary bank account. Setting true demotes any existing primary for the same owner. Defaults to false (the owner’s first bank account always becomes primary regardless of this value). null is treated the same as omitted.

Default:false

Example:false

Response

application/json

Bank account created successfully

BankAccountResponse

idstring(uuid)read-only

The unique identifier for the bank account

Example:550e8400-e29b-41d4-a716-446655440000

typestring

The type of bank account

Allowed values:SAVINGSCHECKING

Example:CHECKING

holderNamestring

Name of the account holder

Example:Jane Doe

numberstringread-only

Masked bank account number (last 4 digits visible)

Example:****7890

routingNumberstringread-only

Bank routing number

Example:021000021

bankNamestring

Name of the bank

Example:Chase Bank

nicknamestring

Optional nickname for the bank account

Example:Main

primaryAccountboolean

Indicates if this is the primary bank account

Example:true

createdAtstring(date-time)read-only

Timestamp when the bank account was created

Example:2024-01-15T10:30:00Z

updatedAtstring | null(date-time)read-only

Timestamp when the bank account was last updated

Example:2024-01-15T14:45:00Z

post/v2/firms/{firmId}/bank-accounts

Body

{ "type": "CHECKING", "holderName": "Jane Doe", "number": "1234567890", "routingNumber": "021000021", "bankName": "Chase Bank" }
 
application/json

Firms

Operations for managing firm identities

List firms (customer-scoped, keyset-paginated)

Returns a keyset-paginated list of firms visible to the authenticated customer, sorted by (modifiedDate ASC, id ASC). Optionally filters to records modified on or after updated_since (RFC3339 instant, inclusive).

The FEIN is always masked to ****. Empty results return items: [], page.size: 0, nextToken: null.

Returns 403 when the caller’s token lacks the required scope.

get

Query Parameters

page_tokenstring

Opaque continuation token returned by the previous response’s page.nextToken. Omit on the first request. Format is server-controlled and may change without an API version bump.

page_sizeinteger(int32)

Requested number of items in the response. Defaults to 25 when omitted; values outside [1, 250] are rejected with 400 (not clamped). The actual size returned is reflected in page.size and may be smaller (last page or empty result).

Default:25

>= 1<= 250

updated_sincestring(date-time)

RFC3339 timestamp. When supplied, only firms modified at or after this instant are returned.

Example:2024-01-15T10:30:00Z

Response

application/json

Firm list retrieved successfully.

FirmV2List

Keyset-paginated list of firms (F5 envelope).

itemsarray[object]required

Customer-facing firm resource. The FEIN is always masked to ****; the full FEIN is available only via GET /v2/firms/{firmId}/fein (audited).

Show Child Parameters
pageobjectrequired

Page metadata for a token-based list response.

Show Child Parameters
get/v2/firms
 
application/json

Get a firm by ID

Returns a single firm visible to the authenticated customer. The FEIN is always masked to **** and never returned in full here; use GET /v2/firms/{firmId}/fein (audited) for the full value.

Returns 404 if the firm does not exist or is not visible to the authenticated customer. A 403 is returned only when the caller’s token lacks the required scope; cross-customer access returns 404, not 403.

get

Path Parameters

firmIdstring(uuid)required

ID of the firm

Response

application/json

Firm retrieved successfully.

FirmV2

Customer-facing firm resource. The FEIN is always masked to ****; the full FEIN is available only via GET /v2/firms/{firmId}/fein (audited).

idstring(uuid)requiredread-only

The unique identifier of the firm.

Example:550e8400-e29b-41d4-a716-446655440000

npnstringrequiredread-only

National Producer Number.

Example:1234567

namestring

Legal name of the firm.

Example:Acme Insurance LLC

emailstring(email)

Primary contact email address.

Example:contact@acme.com

typestring

Business entity type (SC, LLC, SP).

Example:LLC

finraCrdNumberstring

FINRA CRD number (digits only, max 11 characters).

Example:12345

feinstringread-only

Masked Federal Employer Identification Number. Always returned as ****. The full FEIN is never exposed by this endpoint.

Example:****6789

testAccountboolean

Whether this is a test account.

Example:false

createdAtstring(date-time)requiredread-only

ISO-8601 UTC timestamp when the firm was created.

Example:2024-01-15T10:30:00Z

updatedAtstring(date-time)read-only

ISO-8601 UTC timestamp of the last update.

Example:2024-06-01T14:22:00Z

get/v2/firms/{firmId}
 
application/json

Update a firm by ID

Updates mutable fields on a firm visible to the authenticated customer. The fields npn and fein are immutable and cannot be changed via this endpoint. Omitted fields leave the stored value unchanged (partial update).

Returns 404 if the firm does not exist or is not visible to the authenticated customer. A 403 is returned only when the caller’s token lacks the required scope; cross-customer access returns 404, not 403.

put

Path Parameters

firmIdstring(uuid)required

ID of the firm

Body

application/json

UpdateFirmRequest

Fields that may be updated on a firm. All fields are optional — omitted fields leave the stored value unchanged. The npn and fein fields are immutable and cannot be set via this endpoint.

namestring

Legal name of the firm.

Example:Acme Insurance LLC

emailstring(email)

Primary contact email address.

Example:contact@acme.com

typestring

Business entity type (SC, LLC, SP).

Example:LLC

finraCrdNumberstring

FINRA CRD number (digits only, max 11 characters).

Match pattern:^[0-9]*$

<= 11 characters

Example:12345

Response

application/json

Firm updated successfully.

FirmV2

Customer-facing firm resource. The FEIN is always masked to ****; the full FEIN is available only via GET /v2/firms/{firmId}/fein (audited).

idstring(uuid)requiredread-only

The unique identifier of the firm.

Example:550e8400-e29b-41d4-a716-446655440000

npnstringrequiredread-only

National Producer Number.

Example:1234567

namestring

Legal name of the firm.

Example:Acme Insurance LLC

emailstring(email)

Primary contact email address.

Example:contact@acme.com

typestring

Business entity type (SC, LLC, SP).

Example:LLC

finraCrdNumberstring

FINRA CRD number (digits only, max 11 characters).

Example:12345

feinstringread-only

Masked Federal Employer Identification Number. Always returned as ****. The full FEIN is never exposed by this endpoint.

Example:****6789

testAccountboolean

Whether this is a test account.

Example:false

createdAtstring(date-time)requiredread-only

ISO-8601 UTC timestamp when the firm was created.

Example:2024-01-15T10:30:00Z

updatedAtstring(date-time)read-only

ISO-8601 UTC timestamp of the last update.

Example:2024-06-01T14:22:00Z

put/v2/firms/{firmId}

Body

{}
 
application/json