LSBX Direct API Collection

Account Onboarding

Account Onboarding Guide
Learn how to onboard new customers and financial accounts with the following steps.

Steps to Onboard an Account:

  1. Create Customer
    Before opening a financial account, a customer must be created. Customers can be either a person or an organization.

    • Endpoint: Create Customer
    • Tip: If a customer already exists, you can skip this step and proceed to creating a financial account.
  2. Create Financial Account
    After creating a customer, you can attach a financial account to them using the appropriate API.

    • Endpoint: Create Financial Account
    • Tip: Ensure that the customer ID is correctly associated with the financial account.

Optional Steps:

  1. Search for Customer
    Retrieve metadata for a specific customer along with all financial accounts assigned to them.

  2. Get Account Details
    Retrieve metadata for a specific financial account using its account ID.

  3. Get Account Transactions
    Retrieve all transactions for a specific account within the provided date range.

  4. 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.

  5. 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.

    • Endpoint: Get Account Limits
    • Tip: Use this to check the current ACH limits, such as daily and per-transaction limits, for an account.

ACH Transfers

ACH Transfer Guide
Learn how to initiate and manage ACH transfers with the following steps.

Steps to Initiate ACH Transfers:

  1. Create Entity
    Before initiating an ACH transfer, you first need to create an entity to hold external account and routing number details. This entity represents the account holder.
  • Endpoint: Create Entity
  • Tip: The entity ID generated is required for the next steps.
  1. Create ACH Transfer
    Use the Entity ID and an Account ID to create an ACH transfer.
  • Endpoint: Create ACH Transfer
  • Tip: Ensure that you have valid account information for both sender and recipient.

Optional Steps:

  1. Inquiry for Pending ACH Transfers
    Check the status of any pending ACH transfers to see if they processed (no longer show up in the list) or waiting to be processed.
  1. Cancel Pending ACH Transfer
    If needed, you can cancel a pending ACH transfer before it is processed.

Webhook Registration

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:

  1. 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.

  2. 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"
    }]
  }

Release Notes

API Version Environment Availability

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 Version History

v1.2.9 (2025-10-09)

API Updates

New Endpoints:

  • GET /accounts/transactions/{id}/{transaction_id}: Retrieve a specific transaction or pending ACH transfer for a specific account id.

Documentation Updates:

  • Added documentation for additional transaction retrieval endpoint.

v1.2.8 (2025-09-23)

API Updates

  • Performance improvements to Account Create, Customer Create, and Customer Update endpoints.

v1.2.7 (2025-08-19)

Production Release

v1.2.7 (2025-08-12)

API Updates

New Endpoints:

  • 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.

Documentation Updates:

  • Added documentation for webhook integration, including request and response formats.
  • Included a guide on verifying webhook payloads using HMAC signatures.
  • Provided examples of webhook event payloads for various event types.

v1.2.6 (2025-07-16)

API Updates

New Requirements:

  • Every new person customer must have CDD question(s) answered during creation
  • Organization customers do not require CDD questions at this time
  • Added occupation_code field for person customers
    • Required only for consumer accounts and not for business accounts.
    • Must be a valid Standard Occupational Classification (SOC) code
    • Example: "15-0000" for Computer and Mathematical Occupations
    • Download full list of SOC codes
  • Added required naics_code field for organization customers
  • Added optional external_description property to the ACH transfer submission endpoint
    • Allows passing a custom external description (up to 32 characters) for ACH transfers
    • This description will be forwarded to the external financial institution

Breaking Changes:

  • Person customer creation requests without CDD questions will be rejected with a 400 error
  • Organization customer creation requests without naics_code will be rejected with a 400 error

Documentation Updates:

  • Updated customer creation examples to include mandatory fields
  • Added links to download full lists of SOC and NAICS codes for reference
  • Documented new external_description field for ACH transfer requests

Getting Started

Guide to Getting Started
This section provides an introduction to the LSBX API and instructions on how to set up your environment.

Onboarding:

  • A member of the LSBX team will schedule an introductory call.
  • If you request sandbox access, the following steps are required:
    • Sign an LOI and NDA.
    • Provide a list of IP addresses to be whitelisted for secure API access. This ensures that only authorized networks can interact with our API. Please submit your IP addresses to the LSBX team during the onboarding process.

Sandbox Access:

  • You will be set up in our sandbox environment, allowing you to test and familiarize yourself with the API.
  • You will receive a 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 Events

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.

DEPOSIT_ACCOUNT
{
    "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"
}
DEPOSIT_ACCOUNT_HOLD
{
    "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"
}
DEPOSIT_ACCOUNT_PREAUTH_HOLD
{
    "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"
}
DEPOSIT_ACCOUNT_MATURITY_DUE
{
    "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"
}
DEPOSIT_ACCOUNT_STATUS
{
    "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"
}
DEPOSIT_ACCOUNT_TRANSFER_FAILURE
{
    "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
  

}

DEPOSIT_ACCOUNT_TRANSACTION_CREDIT_REVERSAL
{
    "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"
}
DEPOSIT_ACCOUNT_TRANSACTION_DEBIT_REVERSAL
{
    "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
}
DEPOSIT_ACCOUNT_TRANSACTION_DEPOSIT
{
    "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
  

}

DEPOSIT_ACCOUNT_TRANSACTION_WITHDRAWAL
{
    "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"
  

}

DEPOSIT_ACCOUNT_TRANSACTION_FEE
{
    "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
}
DEPOSIT_ACCOUNT_TRANSACTION_INTEREST
{
    "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"
}
DEPOSIT_ACCOUNT_TRANSACTION_INTEREST_PAID
{
    "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"
}
DEPOSIT_ACCOUNT_TRANSACTION_TRANSFER

//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", }

CUSTOMER
{
    "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,
}
CUSTOMER_EMAIL
{
    "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"
}
CUSTOMER_ADDRESS

//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" }

CUSTOMER_PHONE
{
    "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"
}
CUSTOMER_NAME
{
    "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"
}

CDD Questions

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"}}

CDD Question Format in API Requests

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"
      }
    } 
  ]
}

Using CDD Questions When Updating a Person Customer

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.

Errors

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.

Error Response Format

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
}

Authentication

Get access token

Request Requirements:

  • The request body should be sent with a Content-Type of application/x-www-form-urlencoded.
  • Include the client_id, client_secret, and grant_type parameters as specified below.
Request Body schema: application/x-www-form-urlencoded
required

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.

Responses

Response samples

Content type
application/json
{
  • "access_token": "eyJraWQiOiJCS2VKZGdzZmdwK256TXhtTkVSRzRRSXdPcm8wOUdIQ3J5V0U5am9HQWJBPSIsImFsZyI6IlJTMjU2In0.eX5UncGO5dJ6HxuWRoeajkkpb47Ei51fo7gVFSYMJqRCNc7CuFx-lKWcks7jAQx39L-VpVM9_qGUA1Cg59jTGTmg_X8CPwC2ndVyBHxwN6e2BUqJRzUbZggsJCmvZ0lbj5oeZp7XjUD_qxDUug",
  • "expires_in": 900,
  • "token_type": "Bearer"
}

Customers

Create a new customer

This endpoint creates either a Person or an Organization customer based on the provided details.

header Parameters
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.

Request Body schema: application/json
One of
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.

Responses

Request samples

Content type
application/json
Example
{
  • "type": "PERSON",
  • "person_details": {
    },
  • "cdd_questions": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "customer_data": {
    },
  • "accounts": [ ],
  • "errors": [ ]
}

Search for a customer

Search for customers using one of the following methods:

  1. Using a tax_id or a customer_id
  2. Using name-based search (organization name or person's first and last name)

At 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.

Request Body schema: application/json
required
tax_id
string

Tax ID, either in format.

customer_id
string

customer_id, can be used instead of a tax_id.

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.

Responses

Request samples

Content type
application/json
Example
{
  • "first_name": "John",
  • "last_name": "Doe",
  • "is_organization": false
}

Response samples

Content type
application/json
Example
{
  • "credit_or_debit": "PERSON",
  • "id": "22222",
  • "customer_id": "22222",
  • "person_details": {
    },
  • "cdd_questions": [
    ],
  • "accounts": [
    ]
}

Update a customer

This endpoint updates customer details, allowing the update of either a Person or an Organization customer.

path Parameters
id
required
string

The ID of the customer to update

header Parameters
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.

Request Body schema: application/json
One of
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.

Responses

Request samples

Content type
application/json
Example
{
  • "type": "PERSON",
  • "person_details": {
    },
  • "cdd_questions": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "customer_data": {
    },
  • "accounts": [
    ],
  • "errors": [ ]
}

Accounts

Update person or organization account

Update account description for a person or update account description and roles for an organization.

path Parameters
account_id
required
string

The account ID of the account to update.

header Parameters
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.

Request Body schema: application/json
required
type
required
string
Enum: "PERSON" "ORGANIZATION"

Type of the account to update. PERSON or ORGANIZATION.

required
object

Responses

Request samples

Content type
application/json
Example
{
  • "type": "PERSON",
  • "account_details": {
    }
}

Response samples

Content type
application/json
Example
{
  • "account_data": {
    },
  • "errors": [ ]
}

Get account details

This endpoint retrieves details of a specific account based on the account ID.

path Parameters
account_id
required
string

The account id of the account to retrieve.

Responses

Response samples

Content type
application/json
{
  • "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": [ ]
}

Get account bank information

This endpoint retrieves the true account and routing number, which can be used at other FIs. Based on the account ID.

path Parameters
account_id
required
string

Account ID.

Responses

Response samples

Content type
application/json
{
  • "account_number": "111111111",
  • "routing_number": "073905527"
}

Get account limits

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.

path Parameters
account_id
required
string

Account id for which limits are being retrieved.

Responses

Response samples

Content type
application/json
{
  • "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
}

Create account limits

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.

path Parameters
account_id
required
string

The account id of the account for which limits are being created.

header Parameters
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.

Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "ach_daily_limit": 1000,
  • "ach_per_transaction_limit": 100
}

Response samples

Content type
application/json
{
  • "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
}

Delete account limits

This endpoint deletes limits for a specific account based on the account ID. Currently, it supports removing ACH limits.

path Parameters
account_id
required
string

The account ID of the account whose limits are being deleted.

header Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "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
}

Update account limits

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.

path Parameters
account_id
required
string

The account id of the account whose limits are being updated.

header Parameters
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.

Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "ach_daily_limit": 50,
  • "ach_per_transaction_limit": 10
}

Response samples

Content type
application/json
{
  • "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
}

Get account transactions

Retrieve all transactions for a specific account id within the provided date range.

path Parameters
account_id
required
string

The account id of which you are requesting transactions.

query Parameters
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.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Get account transaction by ID

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).

path Parameters
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.

Responses

Response samples

Content type
application/json
Example
{
  • "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"
}

Freeze an account

Freezes the account specified by the account_id parameter. A frozen account cannot process transactions until unfrozen.

path Parameters
account_id
required
string

Account id of the account to freeze

header Parameters
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.

Request Body schema: application/json
required
freeze_account
required
boolean

Indicates whether the account should be frozen (true) or unfrozen (false).

Responses

Request samples

Content type
application/json
{
  • "freeze_account": true
}

Response samples

Content type
application/json
{
  • "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": [ ]
}

Create person or organization account

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 accounts
  • ORGANIZATION for organization accounts
header Parameters
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.

Request Body schema: application/json
required
type
required
string
Enum: "PERSON" "ORGANIZATION"

Type of account. Either 'PERSON' or 'ORGANIZATION'.

required
PersonAccountDetails (object) or OrganizationAccountDetails (object)

Responses

Request samples

Content type
application/json
Example
{
  • "type": "PERSON",
  • "account_details": {
    }
}

Response samples

Content type
application/json
Example
{
  • "account_data": {
    },
  • "errors": [ ]
}

Entities

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.

Search entities

query Parameters
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.

Request Body schema: application/json
required

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.

Responses

Request samples

Content type
application/json
{
  • "account_number": "111111111111",
  • "routing_number": "999999999"
}

Response samples

Content type
application/json
{
  • "entities": [
    ],
  • "page_number": 0,
  • "last_page": true,
  • "paginated_records": 4,
  • "total_records": 4
}

Create entity

This endpoint creates a new external account entity using the provided data.

header Parameters
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.

Request Body schema:
required
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.

Responses

Request samples

Content type
{
  • "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"
}

Response samples

Content type
application/json
{
  • "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
}

Get entity or entities

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.

path Parameters
id
string

The unique identifier for the request. This can either be:

  • The entity ID (to fetch a specific entity).
  • A customer ID (to fetch all entities related to a specific customer).
  • Disregard ID - Will return all entities for the fintech. (your own entities that you created).
query Parameters
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.

Responses

Response samples

Content type
application/json
Example
{
  • "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"
}

Delete entity

This endpoint marks an entity as deleted by its unique ID. The entity will no longer be considered active.

path Parameters
id
required
string

The unique identifier for the entity to be deleted.

header Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "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
}

Update entity

This endpoint allows for partial updates to an existing entity by specifying the entity ID and providing updated fields.

path Parameters
id
required
string

The unique identifier of the entity to be updated.

header Parameters
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.

Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "routing_number": "77777777",
  • "account_number": "999999"
}

Response samples

Content type
application/json
{
  • "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
}

Transfers

Get pending ACH Transfers

Retrieve pending ACH transfers for a specific account.

path Parameters
id
required
string

The unique identifier for the account whose ACH transfers are being queried.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Book Transfer (internal)

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.

header Parameters
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.

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "from_account_id": "aIM5mDwhDDkfKj4npV0mXF5Uk6oEbooCo2ZEUjbH7XKe283ra9AI",
  • "to_account_id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc",
  • "amount": 0.01,
  • "description": "test transaction"
}

Response samples

Content type
application/json
{
  • "from_account": {
    },
  • "to_account": {
    },
  • "amount": 0.01,
  • "description": "test transaction",
  • "created_date": "2024-11-22",
  • "type": "internal"
}

Create an ACH Transfer

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.

header Parameters
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.

Request Body schema: application/json
required
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:

  • DEBIT: Debits the target entity's external account (funds are withdrawn from the entity's account) and credits the originating account (funds are deposited into the originating account).
  • CREDIT: Debits the originating account (funds are withdrawn from the originating account) and credits the target entity's external account (funds are deposited into the entity's account).
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 false if not specified.

Cutoff Times for Same-Day ACH Transfers (Monday–Friday):

  • Central Time: 1:30 PM
  • Eastern Standard Time (EST): 2:30 PM
  • UTC: 7:30 PM

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).

Responses

Request samples

Content type
application/json
{
  • "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
}

Response samples

Content type
application/json
{
  • "id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc_01JDA5TKCSDDZ9WNMMWPENNGGH",
  • "account_id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc",
  • "entity": {
    },
  • "amount": 0.01,
  • "description": "test ach",
  • "created_date": "2024-11-22",
  • "type": "DEBIT",
  • "same_day_ach": false
}

Delete an ACH Transfer

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.

header Parameters
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.

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc_01JDACHTCQJMEQHT0WYXJ19Y6C",
  • "account_id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc"
}

Response samples

Content type
application/json
{
  • "id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc_01JDACJPYCSE4ZXJE94G1KH0JK",
  • "account_id": "Y6Up4WWIooAlD0x4NW9Cuc9CPIC6y79BX5L3Cha5MOayvUNB9CmKsFc",
  • "entity": {
    },
  • "amount": 0.01,
  • "type": "DEBIT",
  • "description": "test ach",
  • "effective_date": "2024-11-22",
  • "same_day_ach": false,
  • "deleted": true
}

Webhooks

Create a Webhook Endpoint

Creates a new webhook endpoint that pushes notifications about events that occur on the platform.

Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "event_scopes": [
    ],
  • "url": "string",
  • "secret": "string",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "message": "Success",
  • "webhooks": [
    ]
}

Get Active Webhook Event Scopes

Retrieve all the active webhook event scopes.

Responses

Response samples

Content type
application/json
{
  • "event_scopes": [
    ]
}

Get Registered Webhooks

Retrieve the webhooks that the client is currently registered for.

query Parameters
active
string
Example: active=false

Optional filter to only retrieve active webhook.

Responses

Response samples

Content type
application/json
{
  • "message": "Success",
  • "webhooks": [
    ]
}

Modify a Registered Webhook

Modify the properties of registered webhook.

path Parameters
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

Request Body schema: application/json
required
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.

Responses

Request samples

Content type
application/json
{
  • "url": "string",
  • "secret": "string",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "message": "Success"
}

Delete a Registered Webhook

Delete the webhook(s) that the client is currently registered for.

path Parameters
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

Responses

Response samples

Content type
application/json
{
  • "message": "Success"
}