Account Onboarding Guide
Learn how to onboard new customers and financial accounts with the following steps.
Steps to Onboard an Account:
Create Customer
Before opening a financial account, a customer must be created. Customers can be either a person or an organization.
Create Financial Account
After creating a customer, you can attach a financial account to them using the appropriate API.
Optional Steps:
Search for Customer
Retrieve metadata for a specific customer along with all financial accounts assigned to them.
Get Account Details
Retrieve metadata for a specific financial account using its account ID.
Get Account Transactions
Retrieve all transactions for a specific account within the provided date range.
Create Account Limits
Set limits for a specific account based on the account ID. Currently, only ACH limits are supported, including daily and per-transaction limits.
Get Account Limits
Retrieve the limits for a specific account based on the account ID. Currently, only ACH limits are supported, but other limit types may be added in the future.
ACH Transfer Guide
Learn how to initiate and manage ACH transfers with the following steps.
Steps to Initiate ACH Transfers:
Optional Steps:
Webhook Registration Guide
Learn how to configure webhook endpoints using the Webhooks API to be notified about events that occur on the platform.
Steps to Create a Webhook:
Identify Relevant Events
Before creating a webhook, identify the event scopes that are relevant to your organiztion. Event scopes and their descriptions are located under the Webhook Events table in the API reference section.
Register Webhook
Using the Create a Webhook API endpoint register your webhook by providing the scopes and the url that the events will be pushed to.
Verifying Webhook Payloads from LSBX
To verify that a webhook event was actually sent by LSBX, every webhook event payload is signed with a signature that is passed through as the HTTP header X-LSBX-Signature. LSBX will use the secret set during webhook registration to generate a HMAC signature using the entire body of the webhook request. LSBX uses SHA-256 to generate the signature. The HMAC signature is calculated by applying the webhook endpoint's signing secret as the key, and the raw JSON payload as the message.
Note: Ensure that webhooks that are registered with the same URL are not registered with different secrets. Different event scopes that are registered to the same URL are sent in the same batch. Using different secrets for the same URL can lead to verification failures.
To verify the signature, you can use the following Python code snippet:
import hmac
import hashlib
def verify_webhook_signature(request_body: str, signature: str, secret: str) -> bool:
computed_signature = (hmac.new(
key=secret.encode('utf-8'),
msg=request_body.encode('utf-8'),
digestmod=hashlib.sha256
).hexdigest()).upper()
#print(f"Computed Signature: {computed_signature}")
return hmac.compare_digest(computed_signature, signature)
Confirmation & Reception of Webhook Events
LSB will perform a POST request to the provided webhook URL with the event payload. If the webhook endpoint does not respond within 10 seconds, or if it responds with a non-2XX status code,
the event will be retried. After 3 days of unsuccessful delivery, the events will be discarded and the webhook will be marked as inactive.
Event Ordering
Webhook events published by LSBX are sent in batches of up to 10 events at a time. Where each batch is processed in the order it was received. However, we can NOT guarantee that events will be delivered in the same order they were created.
Although unlikely, we recommended that you implement idempotency in your webhook handling logic to avoid processing the same event multiple times.
Below is an example of an event payload, where the list would contain at most 10 events:
{
"webhook_events": [{
"event_id": "813c69b5-e351-4405-95f0-0e742c028e4b",
"event_date": "2025-07-29T16:08:03Z",
"event_scope": "customer",
"event_code": "CUSTOMER_NAME",
"event_description": "A customer name has been created or deleted.",
"action": "CREATED",
"customer_id": "16806",
"is_organization": true,
"first_name": "David",
"last_name": "Smith",
"full_name": "David Smith"
}]
}
| Version | Sandbox | Production | Notes |
|---|---|---|---|
| v1.2.9 | ✔️ | ✔️ | New Endpoint, Backend Improvements |
| v1.2.8 | ✔️ | ✔️ | Backend Performance Improvements |
| v1.2.7 | ✔️ | ✔️ | Webhook Integration |
| v1.2.6 | ✔️ | ✔️ | CDD, NAICS and SOC Code Enhancements |
API Updates
GET /accounts/transactions/{id}/{transaction_id}: Retrieve a specific transaction or pending ACH transfer for a specific account id.API Updates
Production Release
API Updates
POST /webhook/create: Register a new webhook.PATCH /webhook/{id}: Update an existing webhook.DELETE /webhook/{id}: Delete an existing webhook.GET /webhook/list/events: List all available webhook scopes.GET /webhook/list: List all registered webhooks.API Updates
occupation_code field for person customers naics_code field for organization customersexternal_description property to the ACH transfer submission endpointexternal_description field for ACH transfer requestsGuide to Getting Started
This section provides an introduction to the LSBX API and instructions on how to set up your environment.
Onboarding:
Sandbox Access:
client_id and client_secret to authenticate in the sandbox. These credentials will be used to request an access token from the Get Access Token endpoint.Webhook Event Format
Each webhook event will contain the same top-level properties. Subsequent properties will vary depending on the event.
Note: The customer_id and the account_id properties are interchangeable depending on the scope of the event. Account specific events will contain the account_id property and customer level events will contain the customer_id property.
{
"event_id": "string", // The unique identifier assigned to the event.
"event_date": "string", // The date the event was generated.
"event_scope": "string", // The assigned scope of the event.
"event_code": "string", // The assigned code of the event.
"event_description": "string", // The assigned description of the event.
"action": "string", // The action identify the state in which a record was changed. This property is only present on change events.
"account_id": "string", // The account_id the event corresponds to.
"customer_id": "string" // The customer_id the event corresponds.
...
}
Webhook Event Types
LSB offers two types of events: Notification Events and Change Events. Notification events are events that notify if something has happened or is going to happen such as a payment due date. Change events are events that notify a change to a record in state such as account creation or modification. Change events will also have a property named action that indicates if the event is a creation, modification, or a deletion.
Webhook Event Scopes
All available webhook events fall under the below scopes. Use these scopes when creating a webhook.
Note: Depending on the size of you screen you may need to scroll horizontally to see the entire table.
| Event Scope | Event Type | Event Code | Event Description |
|---|---|---|---|
| account.deposit | Change Event | DEPOSIT_ACCOUNT | A deposit account record has been created or deleted. |
| account.deposit.notice | Notification Event | DEPOSIT_ACCOUNT_HOLD | A hold has been placed on a deposit account. |
| DEPOSIT_ACCOUNT_PREAUTH_HOLD | A preauthorization hold has been placed on a deposit account. | ||
| account.deposit.status | Notification Event | DEPOSIT_ACCOUNT_STATUS | A status has changed on a deposit account. |
| account.deposit.transactions | Notification Event | DEPOSIT_ACCOUNT_TRANSFER_FAILURE | A scheduled customer transfer to a deposit account failed to post. |
| DEPOSIT_ACCOUNT_TRANSACTION_CREDIT_REVERSAL | A bank credit adjustment or debit reversal has been posted to a deposit account. | ||
| DEPOSIT_ACCOUNT_TRANSACTION_DEBIT_REVERSAL | A bank debit adjustment or credit reversal has been posted to a deposit account. | ||
| DEPOSIT_ACCOUNT_TRANSACTION_DEPOSIT | A check, cash, ATM, or wire deposit has been credited to a deposit account. | ||
| DEPOSIT_ACCOUNT_TRANSACTION_WITHDRAWAL | A check, cash, ATM, or wire withdrawal has been debited from a deposit account. | ||
| DEPOSIT_ACCOUNT_TRANSACTION_FEE | A bank fee or charge has been posted to a deposit account. | ||
| DEPOSIT_ACCOUNT_TRANSACTION_INTEREST | A bank interest adjustment has been posted to a deposit account. | ||
| DEPOSIT_ACCOUNT_TRANSACTION_INTEREST_PAID | Interest was paid to a deposit account. | ||
| DEPOSIT_ACCOUNT_TRANSACTION_TRANSFER | An internal or external transfer to a deposit account has been made. | ||
| customer | Change Event | CUSTOMER | A customer has been created or deleted. |
| CUSTOMER_EMAIL | A customer email address has been added, updated, or deleted. | ||
| CUSTOMER_ADDRESS | A customer address has been added, updated, or deleted. | ||
| CUSTOMER_PHONE | A customer phone number has been added, updated, or deleted. | ||
| CUSTOMER_NAME | A customer name has been added, updated, or deleted. |
Webhook Event Payloads by Event Code
The following table provides the payloads for each webhook event code. Click on the event code to expand and view the payload structure.
{
"event_id": "536fd50b-a456-42f6-9462-1d9bf9c1851a",
"event_date": "2025-07-29T16:08:03Z",
"event_scope": "account.deposit",
"event_code": "DEPOSIT_ACCOUNT",
"event_description": "A deposit account record has been created or deleted.",
"action": "CREATED",
"account_id": "orDZ0n8pqZrMKijTGCirM55cNCerMT3MTeA0sSj1tbk9CZhC4Rm8",
"opened_date": "2025-07-29",
"product_code": "FREE"
}
{
"event_id": "b8acba9e-8c6f-4167-bc92-8c9b87ebf5ad",
"event_date": "2025-07-29T16:08:03Z",
"event_scope": "account.deposit.notice",
"event_code": "DEPOSIT_ACCOUNT_HOLD",
"event_description": "A hold has been placed or removed on a deposit account.",
"action": "DELETED",
"account_id": "AWW9B8eIOXVQe2jrcdAMNVX9BQohxRc5H2vMCGr9BLZl377td4UssY",
"available_balance_amount": 9405.8,
"hold_amount": 120.78,
"hold_description": "Holding",
"hold_expiration_date": "2025-08-03"
}
{
"event_id": "8027b372-aa33-4dc9-b8b7-4cc770fd4e25",
"event_date": "2025-07-29T16:07:59Z",
"event_scope": "account.deposit.notice",
"event_code": "DEPOSIT_ACCOUNT_PREAUTH_HOLD",
"event_description": "A preauthorization hold has been placed on a deposit account.",
"action": "CREATED",
"account_id": "AWW9B8eIOXVQe2jrcdAMNVX9BQohxRc5H2vMCGr9BLZl377td4UssY",
"available_balance_amount": 506.69,
"hold_amount": 127.24,
"hold_description": "Pre Auth",
"hold_expiration_date": "2025-08-03"
}
{
"event_id": "975c483d-1e62-45b3-8b64-285a9fad16de",
"event_date": "2025-07-29T16:08:03Z",
"event_scope": "account.deposit.notice",
"event_code": "DEPOSIT_ACCOUNT_MATURITY_DUE",
"event_description": "A certificate of deposit account or a savings account will mature in n number of days.",
"account_id": "orDZ0n8pqZrMKijTGCirM55cNCerMT3MTeA0sSj1tbk9CZhC4Rm8",
"maturity_date": "2025-08-13"
}
{
"event_id": "25006897-f9c5-4244-a1f9-2f9df0c3a56e",
"event_date": "2025-07-29T16:07:59Z",
"event_scope": "account.deposit.status",
"event_code": "DEPOSIT_ACCOUNT_STATUS",
"event_description": "A status has changed on a deposit account.",
"action": "CREATED",
"account_id": "orDZ0n8pqZrMKijTGCirM55cNCerMT3MTeA0sSj1tbk9CZhC4Rm8",
"account_status": "DELINQUENT"
}
{
"event_id": "42b32ce7-c838-43f5-9e82-43bba669a77e",
"event_date": "2025-07-29T17:36:42Z",
"event_scope": "account.deposit.transactions",
"event_code": "DEPOSIT_ACCOUNT_TRANSFER_FAILURE",
"event_description": "A scheduled customer transfer to a deposit account failed to post.",
"account_id": "AWW9B8eIOXVQe2jrcdAMNVX9BQohxRc5H2vMCGr9BLZl377td4UssY",
"transfer_effective_date": "2025-07-29",
"debiting_account_id": "orDZ0n8pqZrMKijTGCirM55cNCerMT3MTeA0sSj1tbk9CZhC4Rm8",
"crediting_account_id": "AWW9B8eIOXVQe2jrcdAMNVX9BQohxRc5H2vMCGr9BLZl377td4UssY"
"transaction_amount": 117.4
}
{
"event_id": "539cf469-9c1a-4a83-85a3-eed1aa9d7adf",
"event_date": "2025-07-29T17:36:29Z",
"event_scope": "account.deposit.transactions",
"event_code": "DEPOSIT_ACCOUNT_TRANSACTION_CREDIT_REVERSAL",
"event_description": "A bank credit adjustment or debit reversal has been posted to a deposit account.",
"account_id": "orDZ0n8pqZrMKijTGCirM55cNCerMT3MTeA0sSj1tbk9CZhC4Rm8",
"available_balance_amount": 14744.23,
"current_balance_amount": 58.14,
"credit_or_debit": "CREDIT",
"posted_date": "2025-07-29",
"transaction_amount": 4006.62,
"transaction_code": "RETIREMENT_DIST_DEPOSIT",
"transaction_description": "Subscription Payment - Netflix",
"transaction_effective_date": "2025-07-31T17:36:29Z",
"is_same_day_posting": false,
"is_memo_posted": false,
"trace_num": "574769559190087"
}
{
"event_id": "3020ed4a-e38a-453a-ae12-ff26114fdb3c",
"event_date": "2025-07-29T16:07:59Z",
"event_scope": "account.deposit.transactions",
"event_code": "DEPOSIT_ACCOUNT_TRANSACTION_DEBIT_REVERSAL",
"event_description": "A bank debit adjustment or credit reversal has been posted to a deposit account.",
"account_id": "3001202740",
"available_balance_amount": 10221.66,
"current_balance_amount": 12879.8,
"credit_or_debit": "DEBIT",
"posted_date": "2025-07-29",
"transaction_amount": 3401.24,
"transaction_code": "DEALER_INTEREST",
"transaction_description": "Wire Transfer INCOMING",
"transaction_effective_date": "2025-07-31T16:07:59Z",
"is_same_day_posting": true,
"is_memo_posted": true,
"transaction_number":"025744914607267",
"cash_in_amt": 1896.53,
"cash_out_amt": 973.08
}
{
"event_id": "78730aba-418e-4890-b966-2e53557ffcf0",
"event_date": "2025-07-29T16:08:03Z",
"event_scope": "account.deposit.transactions",
"event_code": "DEPOSIT_ACCOUNT_TRANSACTION_DEPOSIT",
"event_description": "A check, cash, ATM, or wire deposit has been credited to a deposit account.",
"account_id": "AWW9B8eIOXVQe2jrcdAMNVX9BQohxRc5H2vMCGr9BLZl377td4UssY",
"available_balance_amount": 19870.84,
"current_balance_amount": 50071.12,
"credit_or_debit": "CREDIT",
"posted_date": "2025-07-29",
"transaction_amount": 1356.51,
"transaction_code": "ATM_PAYMENT_TRANSFER",
"transaction_description": "ATM Deposit - 123 Main St",
"transaction_effective_date": "2025-07-31T16:08:03Z",
"is_same_day_posting": false,
"is_memo_posted": true,
"transaction_number":: "247",
"cash_in_amount": 735.89,
"pos_indicator": false
}
{
"event_id": "24f100f0-200a-4776-a3af-9381615b31fa",
"event_date": "2025-07-29T16:08:03Z",
"event_scope": "account.deposit.transactions",
"event_code": "DEPOSIT_ACCOUNT_TRANSACTION_WITHDRAWAL",
"event_description": "A check, cash, ATM, or wire withdrawal has been debited from a deposit account.",
"account_id": "orDZ0n8pqZrMKijTGCirM55cNCerMT3MTeA0sSj1tbk9CZhC4Rm8",
"available_balance_amount": 18058.49,
"current_balance_amount": 18315.41,
"credit_or_debit": "DEBIT",
"posted_date": "2025-07-29",
"transaction_amount": 319.22,
"transaction_code": "ATM_PAYMENT_TRANSFER",
"transaction_description": "ATM Withdrawal - 123 Main St",
"transaction_effective_date": "2025-07-31T16:08:03Z",
"is_same_day_posting": false,
"is_memo_posted": false,
"open_date": "2025-07-29",
"transaction_number":"752535833465123"
}
{
"event_id": "fd802040-3340-4e3c-a410-5780dbda07e3",
"event_date": "2025-07-29T16:59:55Z",
"event_scope": "account.deposit.transactions",
"event_code": "DEPOSIT_ACCOUNT_TRANSACTION_FEE",
"event_description": "A bank fee or charge has been posted to a deposit account.",
"account_id": "AWW9B8eIOXVQe2jrcdAMNVX9BQohxRc5H2vMCGr9BLZl377td4UssY",
"available_balance_amount": 11553.87,
"current_balance_amount": 13224.81,
"credit_or_debit": "DEBIT",
"posted_date": "2025-07-29",
"transaction_amount": 3051.06,
"transaction_code": "LATE_CHARGE_ASSESSMENT",
"transaction_description": "Late Charge Assessment",
"transaction_effective_date": "2025-07-31T16:59:55Z",
"is_same_day_posting": false,
"is_memo_posted": true,
"transaction_number":"129793383282243",
"pos_indicator": false
}
{
"event_id": "752b3095-29c7-4afb-a458-a0e8acae468f",
"event_date": "2025-07-29T17:00:08Z",
"event_scope": "account.deposit.transactions",
"event_code": "DEPOSIT_ACCOUNT_TRANSACTION_INTEREST",
"event_description": "A bank interest adjustment has been posted to a deposit account.",
"account_id": "orDZ0n8pqZrMKijTGCirM55cNCerMT3MTeA0sSj1tbk9CZhC4Rm8",
"credit_or_debit": "CREDIT",
"posted_date": "2025-07-29",
"transaction_amount": 4012.91,
"transaction_code": "INTEREST_ADJUSTMENT_DEPOSIT",
"transaction_description": "Interest Adjustment Deposit",
"transaction_effective_date": "2025-07-31T17:00:08Z",
"is_same_day_posting": false,
"is_memo_posted": true,
"open_date": "2025-07-29",
"transaction_number":"158"
}
{
"event_id": "38c30845-5e06-4210-af88-477760ffa8a6",
"event_date": "2025-07-29T17:36:29Z",
"event_scope": "account.deposit.transactions",
"event_code": "DEPOSIT_ACCOUNT_TRANSACTION_INTEREST_PAID",
"event_description": "Interest was paid to a deposit account",
"account_id": "orDZ0n8pqZrMKijTGCirM55cNCerMT3MTeA0sSj1tbk9CZhC4Rm8",
"available_balance_amount": 19807.65,
"current_balance_amount": 16032.75,
"credit_or_debit": "CREDIT",
"posted_date": "2025-07-29",
"transaction_amount": 3494.78,
"transaction_code": "CREDIT_INTEREST",
"transaction_description": "Credit Interest",
"transaction_effective_date": "2025-07-31T17:36:29Z",
"is_same_day_posting": true,
"is_memo_posted": false,
"transaction_number":"268596832927196"
}
//INTERNAL (BOOK) TRANSFER EXAMPLE
{
"event_id": "f3a34e82-9221-4078-ab31-887c06e08f78",
"transaction_id": "5d70a9a4fd31358842b1ac7fdkjdfdjfojamldajsa83e51b59bd8a8fd58889_01K1X9ZGWWGERWR6XBYGRH3WSCA",
"event_date": "2025-07-29T16:08:03Z",
"event_scope": "account.deposit.transactions",
"event_code": "DEPOSIT_ACCOUNT_TRANSACTION_TRANSFER",
"event_description": "An internal or external transfer to a deposit account has been made.",
"account_id": "orDZ0n8pqZrMKijTGCirM55cNCerMT3MTeA0sSj1tbk9CZhC4Rm8",
"available_balance_amount": 11619.06,
"current_balance_amount": 13827.04,
"credit_or_debit": "CREDIT",
"posted_date": "2025-07-29",
"transaction_amount": 956.42,
"transaction_type": "INTERNAL",
"transaction_code": "DEPOSIT",
"transaction_description": "Testing internal transfer",
"transaction_external_description": null,
"transaction_effective_date": "2025-07-31T16:08:03Z",
"is_same_day_posting": true,
"is_memo_posted": false,
"transaction_number":"52"
}
//EXTERNAL (ACH) TRANSFER EXAMPLE
{
"event_id": "3BA0806B-7875-851B-E063-1464F10A47D0",
"transaction_id": "5d70a9a4fd31358842b1ac7d129fc657657012effd2a83e51b59bd8a8fd58889_01K1X9ZGWWGERWR6XBYGRH3WSCA",
"event_date": "2025-08-05T10:01:40.0-0500",
"event_scope": "account.deposit.transactions",
"event_code": "DEPOSIT_ACCOUNT_TRANSACTION_TRANSFER",
"event_description": "An internal or external transfer to a deposit account has been made.",
"account_id": "rPKDv9BiljE9BvcvmmkVElfDHlwtOo9Bf7AnPUwhH9CE4U3ZC5SQxLw",
"available_balance_amount": "5847.72",
"current_balance_amount": "5847.72",
"credit_or_debit": "DEBIT",
"posted_date": "2025-08-05",
"transaction_amount": ".01",
"transaction_type": "ACH"
"transaction_code": "ACH_DEBIT",
"transaction_description": "first webhook TEST",
"transaction_external_description": "ACH DEBIT - TO EXTERNAL FI",
"transaction_effective_date": "2025-08-05",
"is_same_day_posting": true,
"is_memo_posted": "false",
"transaction_number": "4758",
}
{
"event_id": "813c69b5-e351-4405-95f0-0e742c028e4b",
"event_date": "2025-07-29T16:08:03Z",
"event_scope": "customer",
"event_code": "CUSTOMER",
"event_description": "A customer has been created or deleted.",
"action": "CREATED",
"customer_id": "16806",
"is_organization": true,
}
{
"event_id": "a0ae6017-812c-448b-b3c3-69bf2ef242eb",
"event_date": "2025-07-29T16:08:03Z",
"event_scope": "customer",
"event_code": "CUSTOMER_EMAIL",
"event_description": "A customer email address has been updated or deleted.",
"action": "DELETED",
"customer_id": "16806",
"is_organization": true,
"email_type": "PERSON",
"email_address": "testing123@gmail.com"
}
//DOMESTIC CUSTOMER EXAMPLE
{
"event_id": "492edd19-b5fb-438d-9710-cc32b33dd491",
"event_date": "2025-07-29T17:36:29Z",
"event_scope": "customer",
"event_code": "CUSTOMER_ADDRESS",
"event_description": "A customer address has been added, updated or deleted.",
"action": "CREATED",
"customer_id": "16816",
"is_organization": true,
"address_type": "PRIMARY",
"address_line_1": "103 Main Street",
"address_line_2": "",
"city": "Buffalo",
"state": "OH",
"region": null,
"postal_code": "14228"
}
//FOREIGN CUSTOMER EXAMPLE
{
"event_id": "492edd19-b5fb-438d-9710-cc32b33dd491",
"event_date": "2025-07-29T17:36:29Z",
"event_scope": "customer",
"event_code": "CUSTOMER_ADDRESS",
"event_description": "A customer address has been added, updated or deleted.",
"action": "CREATED",
"customer_id": "16806",
"is_organization": true,
"address_type": "PRIMARY",
"address_line_1": "123 Canal Road",
"address_line_2": "",
"city": "Toronto",
"state": null,
"region": "BC",
"postal_code": "V5G 2G9"
}
{
"event_id": "3C4021C5-616B-8289-E063-1464F10A7355",
"event_date": "2025-08-13T08:28:26.7-0500",
"event_scope": "customer",
"event_code": "CUSTOMER_PHONE",
"event_description": "A customer phone number has been added, updated, or deleted.",
"action": "CREATED",
"customer_id": "16862",
"is_organization": true,
"phone_number": "8145586712"
}
{
"event_id": "813c69b5-e351-4405-95f0-0e742c028e4b",
"event_date": "2025-07-29T16:08:03Z",
"event_scope": "customer",
"event_code": "CUSTOMER_NAME",
"event_description": "A customer name has been created or deleted.",
"action": "CREATED",
"customer_id": "16806",
"is_organization": true,
"first_name": "David",
"last_name": "Smith",
"full_name": "David Smith"
}
The following table lists the Customer Due Diligence (CDD) questions that must be answered when creating a person customer.
| Question ID | Question Text | Type | Available Answers | Request Structure |
|---|---|---|---|---|
| 1 | Are you currently, or have you ever been a politically exposed person (PEP)? | YN | Yes (1), No (2) | {"id": "1", "answer": {"id": "2"}} |
When submitting CDD questions in your request, include them in the cdd_questions array:
"cdd_questions": [
{
"id": "1", // The question identifier
"answer": {
"id": "2" // The answer identifier: 1 for "Yes", 2 for "No"
}
}
]
In a complete person customer creation request, the CDD questions would be included as follows:
{
"credit_or_debit": "PERSON",
"person_details": {
// Person details here
},
"cdd_questions": [
{
"id": "1",
"answer": {
"id": "2" // 1 for "Yes", 2 for "No"
}
}
]
}
The same format is used when updating a person customer. Include the cdd_questions array in your update request to modify previously provided answers:
{
"credit_or_debit": "PERSON",
"person_details": {
// Updated person details here
},
"cdd_questions": [
{
"id": "1",
"answer": {
"id": "1" // Changing answer to "Yes"
}
}
]
}
Additional CDD questions may be added in the future. Your implementation should be flexible enough to handle new questions as they are introduced.
The following table lists the HTTP status codes returned by the API.
| Status Code | Description |
|---|---|
| 200 | Success. The request was processed and completed successfully. |
| 400 | Invalid Request. The server could not process your request due to invalid or missing data, or the request violates business rules. |
| 401 | Unauthorized. The request lacked valid authentication credentials, such as a missing or invalid API key or session token. |
| 403 | Forbidden. The request is valid, but the authenticated user does not have the necessary permissions to perform this action. |
| 404 | Resource Not Found. The requested resource could not be located on the server. |
| 5xx | Server Error. An unexpected issue occurred on our end. We are actively addressing the issue. |
All error responses follow a consistent format:
{
"credit_or_debit": "string", // The type of error (e.g., validation_error, authentication_error)
"code": "string", // The error code indicating the specific issue
"message": "string", // A message describing the error
"details": "string", // Additional details about the error (nullable)
"http_status_code": 400 // The HTTP status code for the error
}
Request Requirements:
Content-Type of application/x-www-form-urlencoded.client_id, client_secret, and grant_type parameters as specified below.The request body should be x-www-form-urlencoded with client credentials.
| grant_type required | string Value: "client_credentials" OAuth2 grant type. Must be set to 'client_credentials'. |
| client_id required | string The client ID for the OAuth2 application, provided during onboarding. |
| client_secret required | string The client secret for the OAuth2 application, provided during onboarding. |
{- "access_token": "eyJraWQiOiJCS2VKZGdzZmdwK256TXhtTkVSRzRRSXdPcm8wOUdIQ3J5V0U5am9HQWJBPSIsImFsZyI6IlJTMjU2In0.eX5UncGO5dJ6HxuWRoeajkkpb47Ei51fo7gVFSYMJqRCNc7CuFx-lKWcks7jAQx39L-VpVM9_qGUA1Cg59jTGTmg_X8CPwC2ndVyBHxwN6e2BUqJRzUbZggsJCmvZ0lbj5oeZp7XjUD_qxDUug",
- "expires_in": 900,
- "token_type": "Bearer"
}This endpoint creates either a Person or an Organization customer based on the provided details.
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
| type required | string Value: "PERSON" The type of customer, which is always 'PERSON'. |
required | object |
required | Array of objects Customer Due Diligence questions and their answers for regulatory compliance. For details on available questions and answer formats, see the CDD Questions section. |
{- "type": "PERSON",
- "person_details": {
- "first_name": "Alec",
- "last_name": "Baas",
- "middle_name": null,
- "birth_date": "1990-10-16",
- "address": {
- "street": "111 Lincoln Drive",
- "street_line_2": null,
- "city": "Cedar Falls",
- "state": "IA",
- "region": null,
- "postal_code": "50613",
- "country": "USA"
}, - "phone": {
- "country_code": "USA",
- "number": "8145586758"
}, - "identification": {
- "type": "DRIVERS_LICENSE",
- "number": "88888888",
- "issue_date": "2022-09-03",
- "expire_date": "2026-09-02",
- "country_code": "USA"
}, - "tax_id": "111111111",
- "email": "test@test.com",
- "occupation_code": "15-0000"
}, - "cdd_questions": [
- {
- "id": "1",
- "answer": {
- "id": "1"
}
}
]
}{- "customer_data": {
- "type": "PERSON",
- "id": "109409",
- "customer_id": "109409",
- "person_details": {
- "first_name": "Alec",
- "last_name": "Baas",
- "middle_name": null,
- "birth_date": "1990-10-16",
- "address": {
- "street": "111 Lincoln Drive",
- "street_line_2": null,
- "city": "Cedar Falls",
- "state": "IA",
- "postal_code": "50613",
- "country": "USA",
- "region": null
}, - "phone": {
- "country_code": "USA",
- "number": "8145586758"
}, - "identification": {
- "type": "DRIVERS_LICENSE",
- "number": "88888888",
- "issue_date": "2022-09-03",
- "expire_date": "2026-09-02",
- "country_code": "USA"
}, - "tax_id": "111111111",
- "email": "test@test.com",
- "created_date": "2024-11-21",
- "last_maintained_date": "2024-11-22",
- "tax_certification_date": "2024-11-21",
- "age": 34
}
}, - "accounts": [ ],
- "errors": [ ]
}Search for customers using one of the following methods:
tax_id or a customer_idAt least one search criteria must be provided in the request body.
If is_organization is set to true, the customer is considered an organization; otherwise, it defaults to false for a person.
| tax_id | string Tax ID, either in format. |
| customer_id | string
|
| is_organization | boolean Default: false If set to true, the customer is an organization. Defaults to false for a person. |
| organization_name | string Organization name, used for name-based searches when is_organization is true. |
| first_name | string Person's first name, used for name-based searches when is_organization is false. |
| last_name | string Person's last name, used for name-based searches when is_organization is false. |
{- "first_name": "John",
- "last_name": "Doe",
- "is_organization": false
}{- "credit_or_debit": "PERSON",
- "id": "22222",
- "customer_id": "22222",
- "person_details": {
- "first_name": "Alec",
- "last_name": "Doe",
- "middle_name": null,
- "birth_date": "1974-09-16",
- "address": {
- "street": "111 Lincoln Drive",
- "street_line_2": null,
- "city": "Cedar Falls",
- "state": "IA",
- "postal_code": "50613",
- "country": "USA",
- "region": null
}, - "phone": {
- "country_code": "USA",
- "number": "9995586758"
}, - "identification": {
- "credit_or_debit": "DRIVERS_LICENSE",
- "number": "88888888",
- "issue_date": "2022-09-03",
- "expire_date": "2026-09-02",
- "country_code": "USA"
}, - "tax_id": "111111111",
- "email": "test@test.com",
- "created_date": "2024-10-04",
- "last_maintained_date": "2024-10-11",
- "tax_certification_date": "2024-10-04",
- "age": 50
}, - "cdd_questions": [
- {
- "id": "1",
- "answer": {
- "id": "1"
}
}
], - "accounts": [
- {
- "id": "FGMZ1dQF9BSWFW9ACSAJvv5Ezm2KsaUxCjB2hBpRWto9AyUGUOLMKc",
- "product_category_code": "DEPOSIT",
- "product_type": "CHECKING",
- "product_code": "FREE",
- "product_name": "Simply Free Checking",
- "ownership_type": "SINGLE",
- "description": "my account",
- "reporting_for_customer_id": "22222",
- "is_reporting_for_signer": true,
- "is_reporting_for_owner": true,
- "balance": 0,
- "available_balance": 0,
- "status_code": "ACTIVE",
- "is_frozen": false,
- "last_frozen_effective_date": null,
- "roles": [ ]
}
]
}This endpoint updates customer details, allowing the update of either a Person or an Organization customer.
| id required | string The ID of the customer to update |
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
| type required | string Value: "PERSON" The type of customer, which is always 'PERSON'. |
required | object Details about the person being updated. This includes personal identification, address, phone, and email information. Only include the properties you wish to update; omit the ones you don't want to change. |
Array of objects Customer Due Diligence questions and their answers for regulatory compliance. For details on available questions and answer formats, see the CDD Questions section. |
{- "type": "PERSON",
- "person_details": {
- "first_name": "Alec",
- "last_name": "Doe",
- "middle_name": null,
- "address": {
- "street": "11 Market Street",
- "street_line_2": null,
- "city": "Cedar Falls",
- "state": "IA",
- "region": null,
- "postal_code": "50613",
- "country": "USA"
}, - "phone": {
- "country_code": "USA",
- "number": "9998885656"
}, - "identification": {
- "type": "DRIVERS_LICENSE",
- "number": "99999999",
- "issue_date": "2024-09-03",
- "expire_date": "2028-09-02",
- "country_code": "USA"
}, - "email": "test2@test.net",
- "occupation_code": "15-0000",
- "date_of_death": "2028-09-02",
- "death_notification_date": "2028-09-02"
}, - "cdd_questions": [
- {
- "id": "1",
- "answer": {
- "id": "1"
}
}
]
}{- "customer_data": {
- "type": "PERSON",
- "id": "109409",
- "customer_id": "109409",
- "person_details": {
- "first_name": "Alec",
- "last_name": "Doe",
- "middle_name": null,
- "birth_date": "1990-10-16",
- "address": {
- "street": "11 Market Street",
- "street_line_2": null,
- "city": "Cedar Falls",
- "state": "IA",
- "postal_code": "50613",
- "country": "USA",
- "region": null
}, - "phone": {
- "country_code": "USA",
- "number": "8145586758"
}, - "identification": {
- "type": "DRIVERS_LICENSE",
- "number": "88888888",
- "issue_date": "2022-09-03",
- "expire_date": "2026-09-02",
- "country_code": "USA"
}, - "tax_id": "111111111",
- "email": "test@test.com",
- "date_of_death": "2024-10-10",
- "death_notification_date": "2024-10-13",
- "created_date": "2024-11-21",
- "last_maintained_date": "2024-11-22",
- "tax_certification_date": "2024-11-21",
- "age": 34
}
}, - "accounts": [
- {
- "id": "HlBEISl6z5bi6PYuWcK89APIvS9BoYs4gJjYWr9ATToQXfK7XnYCW0",
- "product_category_code": "DEPOSIT",
- "product_type": "CHECKING",
- "product_code": "FREE",
- "product_name": "Simply Free Checking",
- "ownership_type": "S",
- "description": "My checking",
- "reporting_for_customer_id": "109409",
- "is_reporting_for_signer": true,
- "is_reporting_for_owner": true,
- "balance": 0,
- "available_balance": 0,
- "status_code": "ACTIVE",
- "is_frozen": false,
- "last_frozen_effective_date": null,
- "roles": [ ]
}
], - "errors": [ ]
}Update account description for a person or update account description and roles for an organization.
| account_id required | string The account ID of the account to update. |
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
| type required | string Enum: "PERSON" "ORGANIZATION" Type of the account to update. PERSON or ORGANIZATION. |
required | object |
{- "type": "PERSON",
- "account_details": {
- "description": "new description"
}
}{- "account_data": {
- "id": "PDcT7WMRvhKqcsw9Cdp54mdWdD85kt6RP3STIIVcUe6XeCL9CstHI",
- "reporting_for_customer_id": "22222",
- "is_reporting_for_signer": true,
- "is_reporting_for_owner": true,
- "balance": 0,
- "available_balance": 0,
- "product_category_code": "DEPOSIT",
- "product_type_code": "CHECKING",
- "current_product_code": "FREE",
- "product_name": "Simply Free Checking",
- "current_account_status_code": "ACTIVE",
- "is_valid": true,
- "owner_code": "SINGLE",
- "owner_description": "Single",
- "contract_date": "2024-10-28",
- "date_last_contact": "2024-10-28",
- "description": "new description",
- "is_transaction_account": true,
- "is_frozen": false,
- "last_frozen_effective_date": null,
- "currency_code": "USD",
- "currency_description": "US Dollar",
- "roles": [ ]
}, - "errors": [ ]
}This endpoint retrieves details of a specific account based on the account ID.
| account_id required | string The account id of the account to retrieve. |
{- "id": "z6pSB9Bz8lfCbN2zbr9BLhdmOUEDJdsDfQqVc9BBQ9Bfjrl9ANaFijCo",
- "reporting_for_customer_id": "109392",
- "is_reporting_for_signer": true,
- "is_reporting_for_owner": true,
- "balance": 0,
- "available_balance": 0,
- "product_category_code": "DEPOSIT",
- "product_type_code": "CHECKING",
- "current_product_code": "FREE",
- "product_name": "Simply Free Checking",
- "current_account_status_code": "ACTIVE",
- "is_valid": true,
- "owner_code": "SINGLE",
- "owner_description": "Single",
- "contract_date": "2024-11-18",
- "date_last_contact": "2024-11-18",
- "description": "My checking",
- "is_transaction_account": null,
- "is_frozen": false,
- "last_frozen_effective_date": null,
- "currency_code": "USD",
- "currency_description": "US Dollar",
- "roles": [ ]
}This endpoint retrieves the true account and routing number, which can be used at other FIs. Based on the account ID.
| account_id required | string Account ID. |
{- "account_number": "111111111",
- "routing_number": "073905527"
}This endpoint retrieves the limits for a specific account based on the account ID. Currently, it only supports ACH limits, but other types of account limits will be included in the future.
| account_id required | string Account id for which limits are being retrieved. |
{- "id": "c3197bef-8905-4212-b305-9dc39e3222c8",
- "account_id": "z6pSB9Bz8lfCbN2zbr9BLhdmOUEDJdsDfQqVc9BBQ9Bfjrl9ANaFijCo",
- "fintech_id": "1",
- "ach_daily_limit": 1000,
- "ach_per_transaction_limit": 100,
- "used_ach_daily_limit": 0,
- "available_ach_daily_limit": 1000,
- "created_date_time": "2024-11-20T18:34:59.774688+00:00",
- "updated_date_time": null,
- "is_deleted": false
}This endpoint creates limits for a specific account based on the account ID. Currently, it supports setting ACH limits, including daily and per-transaction limits.
| account_id required | string The account id of the account for which limits are being created. |
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
| ach_daily_limit required | number <float> The daily ACH limit for the account. |
| ach_per_transaction_limit required | number <float> The per-transaction ACH limit for the account. |
{- "ach_daily_limit": 1000,
- "ach_per_transaction_limit": 100
}{- "id": "c3197bef-8905-4212-b305-9dc39e3222c8",
- "account_id": "z6pSB9Bz8lfCbN2zbr9BLhdmOUEDJdsDfQqVc9BBQ9Bfjrl9ANaFijCo",
- "fintech_id": "1",
- "ach_daily_limit": 1000,
- "ach_per_transaction_limit": 100,
- "used_ach_daily_limit": null,
- "available_ach_daily_limit": null,
- "created_date_time": "2024-11-20T18:34:59.774688+00:00",
- "updated_date_time": null,
- "is_deleted": false
}This endpoint deletes limits for a specific account based on the account ID. Currently, it supports removing ACH limits.
| account_id required | string The account ID of the account whose limits are being deleted. |
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
{- "id": "c3197bef-8905-4212-b305-9dc39e3222c8",
- "account_id": "z6pSB9Bz8lfCbN2zbr9BLhdmOUEDJdsDfQqVc9BBQ9Bfjrl9ANaFijCo",
- "fintech_id": "1",
- "ach_daily_limit": 1000,
- "ach_per_transaction_limit": 100,
- "used_ach_daily_limit": null,
- "available_ach_daily_limit": null,
- "created_date_time": "2024-11-20T18:34:59.774688+00:00",
- "updated_date_time": null,
- "is_deleted": true
}This endpoint updates limits for a specific account based on the account ID. Currently, it supports updating ACH limits such as daily and per-transaction limits.
| account_id required | string The account id of the account whose limits are being updated. |
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
| ach_daily_limit | number <float> The updated daily ACH limit for the account. |
| ach_per_transaction_limit | number <float> The updated per-transaction ACH limit for the account. |
{- "ach_daily_limit": 50,
- "ach_per_transaction_limit": 10
}{- "id": "e6ba1800-7150-45f7-a2d0-f9a8d4bbb0ed",
- "account_id": "z6pSB9Bz8lfCbN2zbr9BLhdmOUEDJdsDfQqVc9BBQ9Bfjrl9ANaFijCo",
- "fintech_id": "1",
- "ach_daily_limit": 50,
- "ach_per_transaction_limit": 10,
- "used_ach_daily_limit": null,
- "available_ach_daily_limit": null,
- "created_date_time": "2024-11-20T18:52:13.938783+00:00",
- "updated_date_time": "2024-11-20T18:58:08.187216+00:00",
- "is_deleted": false
}Retrieve all transactions for a specific account id within the provided date range.
| account_id required | string The account id of which you are requesting transactions. |
| start_date required | string <date> The start date for the transaction query in YYYY-MM-DD format. |
| end_date required | string <date> The end date for the transaction query in YYYY-MM-DD format. |
| page_number | integer >= 1 Optional. The page number to retrieve, starting from 1. |
| page_size | integer >= 1 Optional. The number of items to return per page. |
[- {
- "id": "z6pSB9Bz8lfCbN2zbr9BLhdmOUEDJdsDfQqVc9BBQ9Bfjrl9ANaFijCo_02JJBR0FXGG9TEQ8QDQNWW24T9",
- "transaction_number": 2502,
- "transaction_type": "ACH_DEBIT",
- "type_description": "ACH Withdrawal",
- "status_code": "C",
- "status_description": "Completed",
- "amount": -1,
- "credit_or_debit": "CREDIT",
- "running_balance": 99.13,
- "original_post_date": "2024-10-17",
- "original_effective_date": "2024-10-17",
- "current_effective_date": "2024-10-17",
- "cash_back_amount": 0,
- "description": "test debit ach",
- "external_description": "external test",
- "account_id": "z6pSB9Bz8lfCbN2zbr9BLhdmOUEDJdsDfQqVc9BBQ9Bfjrl9ANaFijCo",
- "entity_id": "f3fd296a-15a7-4679-bc27-c90abca1a8e3"
}, - {
- "id": "z6pSB9Bz8lfCbN2zbr9BLhdmOUEDJdsDfQqVc9BBQ9Bfjrl9ANaFijCo_01JABGW9765NW03TV2FH8S2W4E",
- "transaction_number": 2501,
- "transaction_type": "ACH_DEPOSIT",
- "type_description": "ACH Deposit",
- "status_code": "C",
- "status_description": "Completed",
- "amount": 0.13,
- "credit_or_debit": "DEBIT",
- "running_balance": 100.13,
- "original_post_date": "2024-10-16",
- "original_effective_date": "2024-10-16",
- "current_effective_date": "2024-10-16",
- "cash_back_amount": 0,
- "description": "test ach",
- "external_description": "external test",
- "account_id": "z6pSB9Bz8lfCbN2zbr9BLhdmOUEDJdsDfQqVc9BBQ9Bfjrl9ANaFijCo",
- "entity_id": "f3fd296a-15a7-4679-bc27-c90abca1a8e3"
}
]Retrieve a specific transaction or pending ACH transfer for a specific account id. Supports legacy transaction id formats (e.g., BSBEA04539_AK19AxIza9BIcJQW89CnwIbIXxdgnGhQzZa9BZoJEzlgFCSWqWQ6acjXb2bgig) and new formats (e.g., z6pSB9Bz8lfCbN2zbr9BLhdmOUEDJdsDfQqVc9BBQ9Bfjrl9ANaFijCo_02JJBR0FXGG9TEQ8QDQNWW24T9, 5d70a9a4fd31358842b1ac7d129fc657657012effd2a83e51b59bd8a8fd58889_5124).
| account_id required | string The account id of which you are requesting a specific transaction. |
| transaction_id required | string The unique identifier for the transaction. |
{- "id": "BSBEA04539_AK19AxIza9BIcJQW89CnwIbIXxdgnGhQzZa9BZoJEzlgFCSWqWQ6acjXb2bgig",
- "transaction_number": 2502,
- "transaction_type": "ACH_DEBIT",
- "type_description": "ACH Withdrawal",
- "status_code": "C",
- "status_description": "Completed",
- "amount": -1,
- "credit_or_debit": "CREDIT",
- "running_balance": 99.13,
- "original_post_date": "2024-10-17",
- "original_effective_date": "2024-10-17",
- "current_effective_date": "2024-10-17",
- "cash_back_amount": 0,
- "description": "test debit ach",
- "external_description": "external test",
- "account_id": "z6pSB9Bz8lfCbN2zbr9BLhdmOUEDJdsDfQqVc9BBQ9Bfjrl9ANaFijCo",
- "entity_id": "f3fd296a-15a7-4679-bc27-c90abca1a8e3"
}Freezes the account specified by the account_id parameter.
A frozen account cannot process transactions until unfrozen.
| account_id required | string Account id of the account to freeze |
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
| freeze_account required | boolean Indicates whether the account should be frozen (true) or unfrozen (false). |
{- "freeze_account": true
}{- "id": "z6pSB9Bz8lfCbN2zbr9BLhdmOUEDJdsDfQqVc9BBQ9Bfjrl9ANaFijCo",
- "reporting_for_customer_id": "109392",
- "is_reporting_for_signer": true,
- "is_reporting_for_owner": true,
- "balance": 0,
- "available_balance": 0,
- "product_category_code": "DEPOSIT",
- "product_type_code": "CHECKING",
- "current_product_code": "FREE",
- "product_name": "Simply Free Checking",
- "current_account_status_code": "ACTIVE",
- "is_valid": true,
- "owner_code": "SINGLE",
- "owner_description": "Single",
- "contract_date": "2024-11-18",
- "date_last_contact": "2024-11-18",
- "description": "My checking",
- "is_transaction_account": null,
- "is_frozen": true,
- "last_frozen_effective_date": "2024-11-20",
- "currency_code": "USD",
- "currency_description": "US Dollar",
- "roles": [ ]
}Creates a new financial account, either as a person (individual) account or an organization (business) account.
The type field in the request body determines which type of account to create:
PERSON for person accountsORGANIZATION for organization accounts| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
| type required | string Enum: "PERSON" "ORGANIZATION" Type of account. Either 'PERSON' or 'ORGANIZATION'. |
required | PersonAccountDetails (object) or OrganizationAccountDetails (object) |
{- "type": "PERSON",
- "account_details": {
- "product_type": "CHECKING",
- "product_code": "FREE",
- "customer_id": "11111",
- "ownership_type": "SINGLE",
- "description": "My checking"
}
}{- "account_data": {
- "id": "fuXbXUwd4kJFhwt9ADZC7V9BJ9BTQuVgqcHbZbGJKAIWLNwcDeopaw",
- "reporting_for_customer_id": "11111",
- "is_reporting_for_signer": true,
- "is_reporting_for_owner": true,
- "balance": 0,
- "available_balance": 0,
- "product_category_code": "DEPOSIT",
- "product_type_code": "CHECKING",
- "current_product_code": "FREE",
- "product_name": "Simply Free Checking",
- "current_account_status_code": "ACTIVE",
- "is_valid": true,
- "owner_code": "SINGLE",
- "owner_description": "Single",
- "contract_date": "2024-11-20",
- "date_last_contact": "2024-11-20",
- "description": "My checking",
- "is_transaction_account": null,
- "is_frozen": false,
- "last_frozen_effective_date": null,
- "currency_code": "USD",
- "currency_description": "US Dollar",
- "roles": [ ]
}, - "errors": [ ]
}Entities in LSBX APIs represent external bank accounts or financial entities. These accounts, along with their associated routing numbers, are securely stored within the LSBX platform, allowing seamless integration with transfer operations. This makes it easy to initiate ACH transactions or other types of payments involving multiple financial institutions.
| page_number | integer Default: 0 The page number for pagination (starting from 0). |
| records_per_page | integer Default: 10 The number of records to return per page. |
Only one of account_number or routing_number is required. If both are provided, the search will be more granular.
| account_number | string The account number for searching entities. |
| routing_number | string The routing number for searching entities. |
{- "account_number": "111111111111",
- "routing_number": "999999999"
}{- "entities": [
- {
- "id": "b8638762-2753-4328-a9bd-6018234b00f4",
- "routing_number": "999999999",
- "account_number": "111111111111",
- "account_type": "Checking",
- "account_holder_name": "Abe Lincoln LLC",
- "is_organization": true,
- "description": "My Checking",
- "custom_string": "112233445566",
- "customer_id": null,
- "fintech_id": "1",
- "created_date_time": "2024-10-04T17:10:10.960296+00:00",
- "updated_date_time": null,
- "financial_institution_name": "a test bank",
- "is_deleted": false
}, - {
- "id": "de7514e6-eb10-4ef5-a645-6e694c39ff2e",
- "routing_number": "999999999",
- "account_number": "111111111111",
- "account_type": "Checking",
- "account_holder_name": "John Doe",
- "is_organization": false,
- "description": "My Checking",
- "custom_string": "112233445566",
- "customer_id": null,
- "fintech_id": "1",
- "created_date_time": "2024-10-04T17:10:13.616014+00:00",
- "updated_date_time": null,
- "financial_institution_name": "a test bank",
- "is_deleted": false
}
], - "page_number": 0,
- "last_page": true,
- "paginated_records": 4,
- "total_records": 4
}This endpoint creates a new external account entity using the provided data.
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
| customer_id | string or null Optional. Can be used to link a specific customer to the associated external accounts. Defaults to using Fintech profile id if not provided. |
| account_number required | string The external account number. |
| routing_number required | string The external routing number. |
| account_type required | string Enum: "Checking" "Savings" The type of external account (either 'Checking' or 'Savings'). |
| account_holder_name required | string The name of the individual or business (ie; John Doe or Abe Lincoln LLC). No special characters permitted. |
| is_organization | boolean or null Marks an entity as a commercial or business account. If not supplied, defaults to false. If false, means this entity is a retail customer. |
| description | string or null Optional. A description of the external account. |
| custom_string | string or null <= 100 characters Optional. A custom string for your own purposes (e.g., UUID, reference ID). |
| financial_institution_name | string or null Optional. The name of the financial institution where the external account is serviced. |
{- "customer_id": "1111",
- "account_number": "23432423",
- "routing_number": "999999999",
- "account_type": "Checking",
- "account_holder_name": "Abe Lincoln LLC",
- "is_organization": true,
- "description": "My Checking",
- "custom_string": "112233445566",
- "financial_institution_name": "a test bank"
}{- "id": "c3e6328f-0104-4aa5-a384-83e4a2411547",
- "routing_number": "999999999",
- "account_number": "23432423",
- "account_type": "Checking",
- "account_holder_name": "Abe Lincoln LLC",
- "is_organization": true,
- "description": "My Checking",
- "custom_string": "112233445566",
- "customer_id": null,
- "fintech_id": "1",
- "created_date_time": "2024-11-20T17:34:16.460204+00:00",
- "updated_date_time": null,
- "financial_institution_name": "a test bank",
- "is_deleted": false
}Retrieves a single entity by its entity ID, all entities associated with a customer ID or all entities that are associated by a fintech.
Use the id path parameter for both entity ID and customer ID lookups.
For all entities that are associated at the fintech level, disregard id entirely.
| id | string The unique identifier for the request. This can either be:
|
| page_number | integer Default: 0 The page number for paginated results. |
| records_per_page | integer Default: 10 The number of records to return per page. |
{- "id": "f6823c33-5482-441d-9a39-1b34adda9725",
- "routing_number": "999999999",
- "account_number": "111111111111",
- "account_type": "Checking",
- "account_holder_name": "Abe Lincoln LLC",
- "is_organization": true,
- "description": "My Checking",
- "fintech_id": "1",
- "created_date_time": "2024-10-04T17:10:14.875930+00:00"
}This endpoint marks an entity as deleted by its unique ID. The entity will no longer be considered active.
| id required | string The unique identifier for the entity to be deleted. |
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
{- "id": "c3e6328f-0104-4aa5-a384-83e4a2411547",
- "routing_number": "999999999",
- "account_number": "23432423",
- "account_type": "Checking",
- "account_holder_name": "Abe Lincoln LLC",
- "is_organization": true,
- "description": "My Checking",
- "custom_string": "112233445566",
- "customer_id": null,
- "fintech_id": "1",
- "created_date_time": "2024-11-20T17:34:16.460204+00:00",
- "updated_date_time": null,
- "financial_institution_name": "a test bank",
- "is_deleted": true
}This endpoint allows for partial updates to an existing entity by specifying the entity ID and providing updated fields.
| id required | string The unique identifier of the entity to be updated. |
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
| routing_number | string The routing number for the entity, if updating. |
| account_number | string The account number for the entity, if updating. |
| customer_id | string An optional customer ID to link to the entity. Defaults to using the fintech profile ID if not provided. |
| account_type | string Enum: "Checking" "Savings" The type of account. Can be either 'Checking' or 'Savings'. |
| account_holder_name | string The name of the individual or business (ie; John Doe or Abe Lincoln LLC). No special characters permitted. |
| is_organization | boolean Marks an entity as a commercial or business account. If not supplied, defaults to false. If false, means this entity is a retail customer. |
| description | string An optional description for the external account. |
| custom_string | string <= 100 characters An optional custom string for your own purposes (e.g., UUID, reference ID). |
| financial_institution_name | string An optional name of the financial institution where the external account is serviced. |
{- "routing_number": "77777777",
- "account_number": "999999"
}{- "id": "f6823c33-5482-441d-9a39-1b34adda9725",
- "routing_number": "77777777",
- "account_number": "999999",
- "account_type": "Checking",
- "account_holder_name": "Abe Lincoln LLC",
- "is_organization": true,
- "description": "My Checking",
- "custom_string": "112233445566",
- "customer_id": null,
- "fintech_id": "1",
- "created_date_time": "2024-10-04T17:10:14.875930+00:00",
- "updated_date_time": "2024-11-20T17:53:48.478650+00:00",
- "financial_institution_name": "a test bank",
- "is_deleted": false
}Retrieve pending ACH transfers for a specific account.
| id required | string The unique identifier for the account whose ACH transfers are being queried. |
[- {
- "id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc_01JD8CK2FY63MCJQGWW0GTW3Y9",
- "account_id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc",
- "entity": {
- "id": "b8638762-2753-4328-a9bd-6018234b00f4",
- "routing_number": "999999999",
- "account_number": "111111111111",
- "account_type": "Checking",
- "account_holder_name": "Abe Lincoln LLC",
- "is_organization": true,
- "description": "My Checking",
- "custom_string": "112233445566",
- "customer_id": null,
- "fintech_id": "1",
- "created_date_time": "2024-10-04T17:10:10.960296+00:00",
- "updated_date_time": null,
- "financial_institution_name": "a test bank",
- "is_deleted": false
}, - "amount": 0.01,
- "type": "DEBIT",
- "description": "test ach",
- "external_description": "external test",
- "effective_date": "2024-11-21",
- "same_day_ach": false,
- "allotment_number": "1",
- "status": "ACH_QUEUED"
}
]This endpoint allows the transfer of funds between two internal accounts.
It debits the from_account_id and credits the to_account_id with the specified amount.
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
The request body contains the details for the internal transfer, including the sending and receiving account IDs, the transfer amount, and an optional description.
| from_account_id required | string The internal account ID from which funds are being transferred. |
| to_account_id required | string The internal account ID that will receive the funds. |
| amount required | number <float> The amount to transfer. |
| description | string <= 100 characters An optional description for the transfer. Maximum character length is 100. No special characters permitted. |
{- "from_account_id": "aIM5mDwhDDkfKj4npV0mXF5Uk6oEbooCo2ZEUjbH7XKe283ra9AI",
- "to_account_id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc",
- "amount": 0.01,
- "description": "test transaction"
}{- "from_account": {
- "id": "BSBEA04539_aIM5mDwhDDkfKj4npV0mXF5Uk6oEbooCo2ZEUjbH7XKe283ra9AI",
- "account_id": "aIM5F0kkwvY5Lfk5fxc9BluN2GIaLVA44fA9C9Adw1gW51NhPdWpA8",
- "transaction_number": 12345
}, - "to_account": {
- "id": "BSBEA04539_DBEAWWLomS2OxOSDLB80clQahH20o1efTMotVYD9CGeCwBQf8057EKUx9B2w",
- "account_id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc",
- "transaction_number": 67891
}, - "amount": 0.01,
- "description": "test transaction",
- "created_date": "2024-11-22",
- "type": "internal"
}Creates an ACH transfer based on the specified parameters. The transfer can be of type DEBIT or CREDIT, which determines how funds are moved between the originating account and the target entity (external account).
Important Note: The time from when an ACH transfer is submitted to when it is processed (leaving "Pending ACH" and appearing in the originating account's transaction history) varies, with processing time ranging from a few hours to a day, depending on the submission time.
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
| account_id required | string Originating account ID for the transfer. |
| entity_id required | string The entity ID set up via the Entities API. Which describes the external side of the transfer. |
| description | string <= 100 characters Optional custom description for the ACH transfer. Maximum character length is 100. No special characters permitted. |
| external_description | string <= 32 characters Optional custom external description for the ACH transfer. This description will forward to the external FI. Maximum character length is 32. No special characters permitted. |
| effective_date | string Optional. If not supplied it defaults to core processing date. Format: YYYY-MM-DD |
| type required | string Enum: "DEBIT" "CREDIT" Specifies the transfer type:
|
| amount required | number <float> The amount for the ACH transfer. |
| same_day_ach | boolean Optional. Indicates if the ACH transfer should be processed as a same-day ACH.
Defaults to Cutoff Times for Same-Day ACH Transfers (Monday–Friday):
ACH transfers requested after the cutoff times will return an error, indicating that the request is past the cutoff time for same-day processing. Important: Same-day ACH processing is not available on Federal Reserve holidays (bank holidays). |
{- "account_id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc",
- "entity_id": "b8638762-2753-4328-a9bd-6018234b00f4",
- "description": "test ach",
- "external_description": "external test",
- "effective_date": "2025-04-10",
- "type": "DEBIT",
- "amount": 0.01,
- "same_day_ach": true
}{- "id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc_01JDA5TKCSDDZ9WNMMWPENNGGH",
- "account_id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc",
- "entity": {
- "id": "b8638762-2753-4328-a9bd-6018234b00f4",
- "routing_number": "999999999",
- "account_number": "111111111111",
- "account_type": "Checking",
- "account_holder_name": "Abe Lincoln LLC",
- "is_organization": true,
- "description": "My Checking",
- "external_description": "external test",
- "custom_string": "112233445566",
- "customer_id": null,
- "fintech_id": "1",
- "created_date_time": "2024-10-04T17:10:10.960296+00:00",
- "updated_date_time": null,
- "financial_institution_name": "a test bank",
- "is_deleted": false
}, - "amount": 0.01,
- "description": "test ach",
- "created_date": "2024-11-22",
- "type": "DEBIT",
- "same_day_ach": false
}This endpoint allows the deletion of an ACH transfer that has been initiated but is still pending.
It requires the id of the ACH transfer, which can be obtained from the Transfers API - Get Pending ACH, and the associated account_id.
ACH transfers that have already been processed cannot be deleted.
| Idempotency-Key | string <= 255 characters Example: 550e8400-e29b-41d4-a716-446655440000 Optional unique key to ensure idempotent request processing. Must be a maximum of 255 characters. It is recommended to use a UUID v4 or an equivalent unique identifier to avoid collisions. Idempotency keys expire after 24-48 hours. |
The request body should contain the ACH transfer id and the account_id of the transfer. Both values can be retrieved from the pending ACH transfer status.
| id required | string The unique identifier for the ACH transfer to be deleted. Can be obtained from Transfers API - Get Pending ACH. |
| account_id required | string The account ID associated with the ACH transfer to be deleted. |
{- "id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc_01JDACHTCQJMEQHT0WYXJ19Y6C",
- "account_id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc"
}{- "id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc_01JDACJPYCSE4ZXJE94G1KH0JK",
- "account_id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc",
- "entity": {
- "id": "b8638762-2753-4328-a9bd-6018234b00f4",
- "routing_number": "999999999",
- "account_number": "111111111111",
- "account_type": "Checking",
- "account_holder_name": "Abe Lincoln LLC",
- "is_organization": true,
- "description": "My Checking",
- "customer_id": "null",
- "fintech_id": "1",
- "created_date_time": "2024-10-04T17:10:10.960296+00:00",
- "updated_date_time": "null",
- "financial_institution_name": "a test bank",
- "is_deleted": false
}, - "amount": 0.01,
- "type": "DEBIT",
- "description": "test ach",
- "effective_date": "2024-11-22",
- "same_day_ach": false,
- "deleted": true
}Creates a new webhook endpoint that pushes notifications about events that occur on the platform.
| event_scopes required | Array of strings non-empty A list of valid event scopes. Supports wildcards. For example, account.deposit.*, would create webhooks for account.deposit, account.deposit.notice, and account.deposit.status and account.deposit.transactions. |
| url required | string The URL the events will be pushed to. URLs must be a valid https:// url. |
| secret required | string Secret must be between 12 and 16 characters long and must contain at least one uppercase, one lowercase, and two special characters. Secret will be used to generate the X-LSBX-SIGNATURE headers in the request allowing for payload verification prior to processing. |
| description required | string A description no longer than 250 characters. |
{- "event_scopes": [
- "string"
], - "url": "string",
- "secret": "string",
- "description": "string"
}{- "message": "Success",
- "webhooks": [
- {
- "id": "55fc991c-ed57-4b59-9cc8-b39adade7dc7",
- "scope_name": "customer.created",
- "description": "Test webhook 1",
- "created_datetime": "2025-06-17T19:43:47Z",
- "last_updated_datetime": null,
- "last_successful_response_datetime": null
}, - {
- "id": "55fc991c-ed57-4b59-9cc8-b39adade7dc7",
- "scope_name": "account.deposit.status.modified",
- "description": "Test webhook 2",
- "created_datetime": "2025-06-17T19:43:47Z",
- "last_updated_datetime": null,
- "last_successful_response_datetime": null
}
]
}Retrieve the webhooks that the client is currently registered for.
| active | string Example: active=false Optional filter to only retrieve active webhook. |
{- "message": "Success",
- "webhooks": [
- {
- "id": "55fc991c-ed57-4b59-9cc8-b39adade7dc7",
- "scope_name": "customer.created",
- "description": "Test webhook 1",
- "created_datetime": "2025-06-17T19:43:47Z",
- "last_updated_datetime": "2025-06-17T21:48:45Z",
- "last_successful_response_datetime": "2025-06-17T19:48:45Z"
}, - {
- "id": "55fc991c-ed57-4b59-9cc8-b39adade7dc7",
- "scope_name": "account.deposit.status.modified",
- "description": "Test webhook 2",
- "created_datetime": "2025-06-17T19:43:47Z",
- "last_updated_datetime": null,
- "last_successful_response_datetime": "2025-06-17T19:48:45Z"
}
]
}Modify the properties of registered webhook.
| id required | string A comma seperated list of the registed webhook id(s) that are to be modified. Can be obtained from Webhook API - Get Registered Webhooks |
| url | string The URL the events will be pushed to. URLs must be a valid https:// url. |
| secret | string Secret must be between 12 and 16 characters long and must contain at least one uppercase, one lowercase, and two special characters. Secret will be used to generate the X-LSBX-SIGNATURE headers in the request allowing for payload verification prior to processing. |
| description | string A description no longer than 250 characters. |
{- "url": "string",
- "secret": "string",
- "description": "string"
}{- "message": "Success"
}Delete the webhook(s) that the client is currently registered for.
| id required | string A comma seperated list of the registed webhook id(s) that are to be modified. Can be obtained from Webhook API - Get Registered Webhooks |
{- "message": "Success"
}