Guides
API Reference

Dev Center

Start building and keep innovating with Solid Banking Platform. In the Dev Center, you will learn the how of launching on Solid – API docs, SDKs, and other resources you need to build your money experience.

Getting Started

We keep money simple. You Store, You Spend, You Receive, You Send. By building on Solid's Banking Platform, you can finally offer the right money experience in your product.

In order to get started, you'll need:
- client Id for user based auth (token) or api-key for userless auth.
- API docs
- access to the Solid Dashboard

There are nine steps to originate a bank account, create cards and send money. Follow the step by step instructions here.

SDKs

Whether you’re new to the Solid Banking Platform or seasoned in all things banking, our SDKs will help you build the right experience for your customers. We offer client and platform SDKs for several popular programming languages.

Client SDKs provides a drop-in UI and tools for your applications to originate a bank account, create cards and send money. The SDK offers a number of benefits to help you create the best banking experience for your customers. Client SDKs are currently available in:
- JavaScript SDK for Web apps
- Kotlin SDK for Android apps
- Swift SDK for iOS apps

Platform SDKs are currently in development and will be available soon.

Dashboard

The Solid Dashboard offers a user experience for you to build and operate banking. You can use it to manage your Solid Banking program including originated bank accounts, created cards, along with the ability to review account level transactions. Overview provides information about the activity on your account. A wide range of analytics and real-time insights provide insight into the performance of your banking integration.

The Dashboard is organized by the most common modules of the banking processes. You will see all the information related to:
- Person
- Business
- Bank Accounts
- Cards
- Transactions

You can use the Dashboard to:
- toggle between TEST and LIVE mode.
- view dev and program related information
- invite other team members
- view activity logs

You can access your account via the Dashboard here:

https://dashboard.solidfi.com

Testing

For the ease of development, Solid Banking Platform offers you two modes:

Test: Test credentials and real-life like data. Requests made to the Test environment will never hit banking or payments or identity verification networks. These will never affect live data.

Live: Real credentials and real data. Requests made to the Live environment will hit Live environments of banking or payments or identity verification networks. These will hit live data.

You can use the Test mode to build, test and certify your banking integration before your program is switched to the live mode. Test Mode uses live phone numbers, but provides you with test values, so you can trigger different flows, as you test/build.

Person (KYC) Testing:
When you add a person, you will need to run a KYC (Know Your Customer) for that person. Only after KYC is approved, a personal bank account can be originated for the person. KYC results (approved, review, declined) can be simulated in TEST mode based on the entered SSN (idNumber).
- Approved: Any SSN that starts with 2 will be approved (Ex: 271-81-2177)
- Review: Any SSN starts with 1 will go into a review (Ex: 171-81-2177)
- Declined: Any SSN that starts with 0 will be declined (Ex: 071-81-2177)

Business (KYB) Testing:
When you add a business, you will need to run a KYB (Know Your Business) for that business. Only after KYC for the person (applicant) is approved and KYB for the business is approved, a bank account can be originated for the business. KYB results (approved, review, declined) can be simulated  in TEST mode based on the entered EIN (idNumber).
- Approved: Any EIN that starts with 2 will be approved (Ex: 27-1812177)
- Review: Any EIN that starts with 1 will go into a review (Ex: 17-1812177)
- Declined: Any EIN that starts with 0 will be declined (Ex: 07-1812177)

Card Test:
You can create cards and simulate card transactions in Solid's TEST mode. This allows you to test your cards before you go LIVE without having to make actual money transactions. Currently, you can use the simulation only to test virtual cards. Follow these steps:
1. Create a Card (cardType: virtual)
2. Test a Card (pass the test amount)
3. You can List all Card transactions made on the card, by filtering by the cardId parameter in the List all Transactions endpoint. You can also view the transaction by calling the Retrieve a Transaction endpoint or in the Solid Dashboard (in TEST mode). Go to Card section – you will see the card, along with transaction details.

Introduction

Environments
Each environment has its own URL endpoint as follows:

ENDPOINT
TEST: https://test-api.solidfi.com
LIVE: https://api.solidfi.com

Here are the nine steps we will guide you through. After completing these nine steps, you will have originated a bank account, created cards and sent money.

Step 1: Auth (only needed if you are using User Auth (token based) Authentication method)
- create passwordless login using phone number: POST /v1/auth/login
- verify using 2FA code: POST /v1/auth/verify
- a person with the login is automatically created (personId)
- capture the accessToken to perform the steps below.

Step 2: Person
- create person if you are using Userless Auth (api-key based) Authentication method
- update person with details: PATCH /v1/person/{{personId}}
- submit the person for a KYC: POST v1/person/{{personId}}/kyc
- check the KYC result: GET /v1/person/{{personId}}/kyc
- if you are creating a business bank account, go to Step 3, else to Step 5

Step 3: Business
- create business with details: POST /v1/business
- submit the business for a KYB: /v1/business/{{businessId}}/kyb
- check the KYB result: GET /v1/business/{{businessId}}/kyb
- if the business has owners with over 25% ownership, go to Step 4, else go to Step 5

Step 4: Owners
- create owners with details: POST /v1/owner
- submit the owner for a KYC: POST /v1/owner/{{ownerId}}/kyc
- check the KYC result: GET /v1/owner/{{ownerId}}/kyc

Step 5: Bank Accounts
- in order to create a bank account, person KYC needs to be approved and business KYB needs to be approved (if applicable)
- create bank account with details: POST /v1/account
- create couple of accounts (account 1 and account 2) under the same business, so you can move money between accounts

Step 6: Contacts
- while in account 1, create contact A with account 2's bank account number: POST /v1/contact

Step 7: Send
- send an intrabank transfer from account 1 to contact A: /v1/send/intrabank

Step 8: Cards
- create cards in account 1: /v1/card

Step 9: Transactions
- view transactions of account 1: /v1/account/{{accountId}}/transaction

Congratulations, you have now successfully created a person, a business, created two bank accounts for the business, sent money between them, and created a credit card!

Authentication

Solid offers two methods of authentication to best suit your use-case: User Auth (token based) and Userless Auth (API key based).

1. User Auth (token based)

In this method, your application receives an access token after your user successfully logs in. This method:
- is done via a Passwordless authentication process, that requires the user to verify the identity with their phone number and confirming a 2FA code via SMS message.
- authorizes your application to access the Solid API by passing the access token in the authorization header.
- works well when you'd like Solid to manage the identity and access management (IAM) of the user.

Login request requires you to pass:
- sd-device-id in the header (unique identifier of the device, could be user's mobile or desktop UUID)
- connection: sms (requesting a 2FA verification via SMS)
- phone: <your_phone_number> (user's phone number in the body)
- send": code (requesting a 2FA 6 digit code)
- clientId": <your_client_id> (provided to you by Solid)

A valid login request sets you up for the next step: verification.

LOGIN REQUEST
curl --request POST '<base_url>/v1/auth/login' \
‍--header 'sd-device-id: 54b3e7c70000-000046bffd97' \
--header 'Content-Type: application/json' \
--data-raw '{
   "connection": "sms",
   "phone": "+14052894793",
   "send": "code",
   "clientId": "<your_client_id>"
}'
LOGIN RESPONSE
{
 "phone": "+16506494305",
 "idNumberLast4Required": true
}

If idNumberLast4Required is true, it means that the login request is coming in from:
- a user that exists on the Solid platform and,
- a device that the Soild platform has never seen before.
This would require passing of last 4 of the idNumber in the body of the verification request. For example: if SSN (271-81-2234) was used as the idNumber while signing up for the first time, then pass: "idNumberLast4": "2234" in the verification request along with the new sd-device-id.

If idNumberLast4Required is false, it means that the login request is coming in from:
- a user that exists on the Solid platform and,
- a device that the Soild platform has seen before.
or,
- a completely new user that does not exist on the Solid platform (idNumber is not set).
This would not require passing of last 4 of the idNumber in the body of the verification request.

Verification request requires you to pass:
- sd-device-id in the header (unique identifier of the device, could be user's mobile or desktop UUID)
- connection: sms,   (2FA verification sent via SMS)
- phone: <your_phone_number> (user's phone number in the body)
- code: <your_2fa_code>  (2FA 6 digit code)
- clientId: <your_client_id> (provided to you by Solid)
- idNumberLast4": "<last4_of_idnumber>" (required only if login response returned idNumberLast4Required: true)

A successful login verification request receives the access token that authorizes your application to access the Solid API by passing the access token as an authorization header.

Note: If you are using User Auth (token based) method for authentication, then you do not need to create a person. A successful new user login automatically creates the person object for you. You can retrieve the person id by passing the access token in the authorization header in the Retrieve a Person API.

VERIFICATION REQUEST
curl --request POST '<base_url>/v1/auth/verify' \
--header 'sd-device-id: 54b3e7c70000-000046bffd97' \
--header 'Content-Type: application/json' \
--data-raw '{
  "connection": "sms",
  "phone": "+14052894793",
  "code": "499460",
  "clientId": "<your_client_id>",
  "idNumberLast4": "2234"
}'
VERIFICATION RESPONSE
{
 "accessToken": "<access_token>",
 "refreshToken": "<refresh_token>",
 "idToken": "<id_token>",
 "expiresIn": 10000,
 "bearer": "Bearer"
}

As you have seen above:
- Solid Platform issues an access token in response to a successful verification request. Along with the access token, it also issues a refresh token.
- Both are JWT tokens and therefore have expiration dates (expiresIn).

Typically, a user needs a new access token when gaining access to a resource for the first time, or after the previous access token granted to them expires. You can:
- use access token to make authenticated calls to the Solid API.
- a refresh token is used to obtain a renewed access token.
- store refresh tokens securely because they essentially allow a user to remain authenticated.

For native apps, refresh tokens improve the authentication experience significantly, by calling it post device biometrics (such as TouchID or FaceID). Subsequent re-authentication can take place without user interaction, using the refresh token. The id token contains user attributes.

REFRESH REQUEST
curl --request POST '<base_url>/v1/auth/refresh' \
--header 'sd-device-id: 54b3e7c70000-000046bffd97' \
--header 'Content-Type: application/json' \
--data-raw '{
   "clientId": "<your_client_id>",
   "refreshToken": "<refresh_token>",
   "idToken": "<id_token>"
}'
REFRESH RESPONSE
{
 "accessToken": "<access_token>",
 "refreshToken": "<refresh_token>",
 "idToken": "<id_token>",
 "expiresIn": 10000,
 "bearer": "Bearer"
}

2. Userless Auth (API key based):

This is used for server-side applications that don't require a user authentication and authorization. This method uses:
- API key: value pair to authenticate API requests.
- TEST mode API keys with the prefix sd_test_<your_api_key>.
- LIVE mode API keys with the prefix sd_live_<your_api_key>.

You can view and manage your API keys in the Solid Dashboard.

Note: If you are using Userless Auth (API key based) method for authentication, then you can:
- proceed to Create a Person.
- once you create a person, you will receive the person id.
- you will then need to pass the person id (sd-person-id) in the header along with the API key (sd-api-key) in every API call.

EXAMPLE
curl --request GET <base_url>/v1/person \
--header 'Content-Type: application/json' \
--header 'sd-api-key: sd_test_34477ggh88' \
--header 'sd-person-id: per-bace1330-8478-4963-9ae8-e06a478228a1' \

Person

Person is an individual that:
- with a legal name, phone, date of birth, etc.
- goes through Know Your Customer (KYC) process for verification.
- could be owner of a business (with over 25% ownership).
- creates a personal bank account on Person's KYC approval.
- creates a business bank account on Person's KYC and Business's KYB approval.

The Person object

Field Type Optional Description
id string unique id of the person created
firstName string first name of the person
middleName string Yes middle name of the person
lastName string last name of the person
phone string mobile phone of the person
phoneVerified boolean Yes is the person's phone verified
email string email of the person
emailVerified boolean Yes is the person's email verified
dateOfBirth string date of birth of the person (YYYY-MM-DD)
idType enum type of the identity used with possible values:
- ssn
- passport
idNumber string identity number, enter full SSN if idType is ssn
address object see The Address sub-object
kyc object see The KYC sub-object
createdAt string time at which the person object was created
modifiedAt string time at which the person object was modified

The Address sub-object

Field Type Optional Description
addressType enum address type with possible values:
- mailing
- billing
- shipping
line1 string line 1 of the address
line2 string Yes line 2 of the address
city string city of the address
state string two letter abbreviation of the US state (ex: CA)
country string two letter abbreviation of the country (ex: US)
postalCode string postal code of the address
createdAt string time at which the address object was created
modifiedAt string time at which the address object was modified

The KYC sub-object

Field Type Optional Description
id string unique id of the person's KYC created
personId string unique id of the person
status enum person's KYC status with possible values:
- notStarted
- submitted
- approved
- declined
- inReview
reviewCode string code if KYC status results in a review
reviewMessage string message if KYC status results in a review
results object result of the KYC
{
   "idv": "approved",
   "dateOfBirth": "approved",
    "address": "approved",
    "fraud": "approved"
}
createdAt string time at which the KYC object was created
modifiedAt string time at which the KYC object was modified

Create a Person
Creates a person by passing the required person information.
Note: If you are using User Auth (token based) method for authentication, then you do not need to create a person. A successful new user login automatically creates the person object for you. You can retrieve the person id by passing the access token in the authorization header in the Retrieve a Person API.

ENDPOINT
POST /v1/person
REQUEST
{
 "firstName": "John",
 "middleName": "",
 "lastName": "Doe",
 "phone": "+19418405934",
 "email": "john.doe@gmail.com",
 "dateOfBirth": "1974-01-25",
 "idNumber": "223902234",
 "idType": "ssn",
 "address": {
   "addressType": "mailing",
   "line1": "123  Main  St",
   "line2": "",
   "city": "New York",
   "state": "NY",
   "country": "US",
   "postalCode": "10001"
 }
}
Copied!
RESPONSE
{
   "id": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
   "firstName": "John",
   "middleName": "",
   "lastName": "Doe",
   "phone": "+19418405934",
   "phoneVerified": true,
   "email": "john.doe@gmail.com",
   "emailVerified": false,
   "dateOfBirth": "1974-01-25",
   "idNumber": "223902234",
   "idType": "ssn",
   "address": {
       "addressType": "mailing",
       "line1": "123  Main  St",
       "line2": "",
       "city": "New York",
       "state": "NY",
       "country": "US",
       "postalCode": "10001"
   },
   "kyc": {
       "id": "kyc-f6758c79-0c6c-41f0-a539-d95586ee9ddb",
       "personId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
       "status": "notStarted",
       "reviewCode": "",
       "reviewMessage": "",
       "results": {
           "idv": "notStarted",
           "dateOfBirth": "notStarted",
           "address": "notStarted",
           "fraud": "notStarted"
       },
       "createdAt": "2021-03-22T21:01:53Z",
       "modifiedAt": "2021-03-22T21:30:00Z"
   },
   "programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
   "createdAt": "2021-03-22T21:01:24Z",
   "modifiedAt": "2021-03-22T21:59:18Z"
}
Copied!

Update a Person
Updates the person information by passing the person id. You can only update:
- name
- date of birth
- idNumber
- idType
- email
- address

ENDPOINT
PATCH /v1/person/:id
REQUEST
{
   "email":"john.broadway@gmail.com"
}
Copied!
RESPONSE
{
 "id": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
 "firstName": "John",
 "middleName": "",
 "lastName": "Doe",
 "phone": "+19418405934",
 "phoneVerified": true,
 "email": "john.broadway@gmail.com",
 "emailVerified": false,
 "dateOfBirth": "1974-01-25",
 "idNumber": "223902234",
 "idType": "ssn",
 "address": {
   "addressType": "mailing",
   "line1": "123  Main  St",
   "line2": "",
   "city": "New York",
   "state": "NY",
   "country": "US",
   "postalCode": "10001"
 },
 "kyc": {
   "id": "kyc-f6758c79-0c6c-41f0-a539-d95586ee9ddb",
   "personId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
   "status": "notStarted",
   "reviewCode": "",
   "reviewMessage": "",
   "results": {
     "idv": "notStarted",
     "dateOfBirth": "notStarted",
     "address": "notStarted",
     "fraud": "notStarted"
   },
   "createdAt": "2021-03-22T21:01:53Z",
   "modifiedAt": "2021-03-22T21:30:00Z"
 },
 "programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
 "createdAt": "2021-03-22T21:01:24Z",
 "modifiedAt": "2021-03-22T21:59:18Z"
}
Copied!

Retrieve a Person
Retrieves the person information by passing the person id.

ENDPOINT
GET /v1/person/:id
RESPONSE
{
 "id": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
 "firstName": "John",
 "middleName": "",
 "lastName": "Doe",
 "phone": "+19418405934",
 "phoneVerified": true,
 "email": "john.broadway@gmail.com",
 "emailVerified": false,
 "dateOfBirth": "1974-01-25",
 "idType": "ssn",
 "idNumber": "223902234",
 "address": {
   "addressType": "mailing",
   "line1": "123  Main  St",
   "line2": "",
   "city": "New York",
   "state": "NY",
   "country": "US",
   "postalCode": "10001"
 },
 "kyc": {
   "id": "kyc-f6758c79-0c6c-41f0-a539-d95586ee9ddb",
   "personId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
   "status": "notStarted",
   "reviewCode": "",
   "reviewMessage": "",
   "results": {
     "idv": "notStarted",
     "dateOfBirth": "notStarted",
     "address": "notStarted",
     "fraud": "notStarted"
   },
   "createdAt": "2021-03-22T21:01:53Z",
   "modifiedAt": "2021-03-22T21:01:53Z"
 },
 "programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
 "createdAt": "2021-03-22T21:01:24Z",
 "modifiedAt": "2021-03-22T21:09:22Z"
}
Copied!

Submit a KYC
After collecting the individual's info, the person must meet the country's requirements to open a bank account. This verification is called Know Your Customer (KYC). Submit the person for a KYC verification using this API.

ENDPOINT
POST /v1/person/:id/kyc
RESPONSE
{
 "id": "kyc-f6758c79-0c6c-41f0-a539-d95586ee9ddb",
 "personId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
 "status": "submitted",
 "reviewCode": "",
 "reviewMessage": "",
 "results": {
   "idv": "notStarted",
   "dateOfBirth": "notStarted",
   "address": "notStarted",
   "fraud": "notStarted"
 },
 "createdAt": "2021-03-22T21:01:53Z",
 "modifiedAt": "2021-03-22T21:24:37Z"
}
Copied!

Retrieve a KYC
Retrieves the person's KYC information by passing the person id.

ENDPOINT
GET /v1/person/:id/kyc
RESPONSE
{
 "id": "kyc-f6758c79-0c6c-41f0-a539-d95586ee9ddb",
 "personId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
 "status": "approved",
 "reviewCode": "",
 "reviewMessage": "",
 "results": {
   "idv": "approved",
   "dateOfBirth": "approved",
   "address": "approved",
   "fraud": "approved"
 },
 "createdAt": "2021-03-22T21:01:53Z",
 "modifiedAt": "2021-03-22T21:30:00Z"
}
Copied!

Business

Business is a legal entity that:
- belongs to an entity type (corp, LLC, sole proprietorship, partnership, etc.).
- has a tax identification number (called TIN or EIN).
- has owners (those with over 25% ownership need to be disclosed to create a bank account).
- has an applicant that applies for a bank account (control person).
- verifies the business information via Know Your Business (KYB) process.
- creates a business bank account on Applicant's (person) KYC and Business's KYB approval.

The Business object

Field Type Optional Description
id string unique id of the business created
personId string person id of the applicant creating the business
legalName string legal name of the business
entityType enum entity type of the business with possible values:
- soleProprietor
- singleMemberLLC
- limitedLiabilityCompany
- generalPartnership
- unlistedCorporation
- publiclyTradedCorporation
- association
- nonProfit
- governmentOrganization
- revocableTrust
- irrevocableTrust
- estate
dba string Yes doing business as
email string Yes email of the business
idType enum type of the business identity used with possible values:
- ein
- ssn
idNumber string tax identification number of the business for the idType
phone string Yes mobile phone of the business
formationDate string date business was formed (YYYY-MM-DD)
website string Yes website of the business
about string Yes more about the business
industry string industry the business belongs to (select any while testing. we will provide the entire list before going live):
- retail
- wholesale
- restaurants
- hospitals
- construction
- insurance
- unions
- realEstate
- freelanceProfessional
- otherProfessionalServices
- onlineRetailer
- otherEducationServices
disclosureStatus enum status of the business disclosures such as ownership with possible values:
- notStarted
- pending
- completed
address object see The Address sub-object
kyb object see The KYB sub-object
createdAt string time at which the business object was created
modifiedAt string time at which the business object was modified

The KYB sub-object

Field Type Optional Description
id string unique id of the business KYB created
businessId string unique id of the business
status enum business KYB status with possible values:
- notStarted
- submitted
- approved
- declined
- inReview
reviewCode string code if KYB status results in a review
reviewMessage string message if KYB status results in a review
results object result of the KYB
{
   "fraud": "approved",
   "address": "approved",
    "businessName": "approved",
    "personName": "approved"
}
createdAt string time at which the KYB object was created
modifiedAt string time at which the KYB object was modified

Create a Business
Creates a business by passing the required business information.

ENDPOINT
POST /v1/business
REQUEST
{
 "legalName": "Acme LLC",
 "entityType": "limitedLiabilityCompany",
 "dba": "Acme",
 "email": "john@acme.com",
 "idType": "ein",
 "idNumber": "287654321",
 "phone": "+16604491145",
 "formationDate": "2018-02-18",
 "website": "acme.com",
 "about": "clinic for health issues",
 "industry": "healthServices",
 "address": {
   "addressType": "mailing",
   "line1": "123  Main  St",
   "line2": "",
   "city": "New York",
   "state": "NY",
   "country": "US",
   "postalCode": "10001"
 }
}
Copied!
RESPONSE
{
 "id": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "personId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
 "legalName": "Acme LLC",
 "entityType": "limitedLiabilityCompany",
 "dba": "Acme",
 "email": "john@acme.com",
 "idType": "ein",
 "idNumber": "287654321",
 "phone": "+16604491145",
 "formationDate": "2018-02-18",
 "website": "acme.com",
 "about": "clinic for health issues",
 "industry": "healthServices",
 "disclosureStatus": "notStarted",
 "address": {
   "addressType": "mailing",
   "line1": "123  Main  St",
   "line2": "",
   "locality": "New York",
   "adminArea": "NY",
   "country": "US",
   "postalCode": "10001"
 },
 "kyb": {
   "id": "kyb-d85f7f4e-4a54-4754-8468-7ff344fca0e5",
   "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
   "status": "notStarted",
   "reviewCode": "",
   "reviewMessage": "",
   "results": {
     "fraud": "notStarted",
     "address": "notStarted",
     "businessName": "notStarted",
     "personName": "notStarted"
   },
   "createdAt": "2021-03-22T21:41:13Z",
   "modifiedAt": "2021-03-22T21:41:13Z"
 },
 "createdAt": "2021-03-22T21:40:44Z",
 "modifiedAt": "2021-03-22T21:40:44Z",
 "programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
 "createdPersonId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5"
}
Copied!

Update a Business
Updates the business information by passing the business id. You can only update:
- legal name
- entity type
- dba
- email
- idType
- idNumber
- phone
- formationDate
- website
- about
- industry
- address

ENDPOINT
PATCH /v1/business/:id
REQUEST
{
 "email": "joe@acme.com"
}
Copied!
RESPONSE
{
"id": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
"personId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
"legalName": "Acme LLC",
"entityType": "limitedLiabilityCompany",
"dba": "Acme",
"email": "joe@acme.com",
"idType": "ein",
"idNumber": "287654321",
"phone": "+16604491145",
"formationDate": "2018-02-18",
"website": "acme.com",
"about": "clinic for health issues",
"industry": "healthServices",
"disclosureStatus": "notStarted",
"address": {
  "addressType": "mailing",
  "line1": "123  Main  St",
  "line2": "",
  "locality": "New York",
  "adminArea": "NY",
  "country": "US",
  "postalCode": "10001"
},
"kyb": {
  "id": "kyb-d85f7f4e-4a54-4754-8468-7ff344fca0e5",
  "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
  "status": "notStarted",
  "reviewCode": "",
  "reviewMessage": "",
  "results": {
    "fraud": "notStarted",
    "address": "notStarted",
    "businessName": "notStarted",
    "personName": "notStarted"
  },
  "createdAt": "2021-03-22T21:41:13Z",
  "modifiedAt": "2021-03-22T21:41:13Z"
},
"createdAt": "2021-03-22T21:40:44Z",
"modifiedAt": "2021-03-22T21:40:44Z",
"programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
"createdPersonId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5"
}
Copied!

Retrieve a Business
Retrieves the business information by passing the business id.

ENDPOINT
GET /v1/business/:id
RESPONSE
{
"id": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
"personId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
"legalName": "Acme LLC",
"entityType": "limitedLiabilityCompany",
"dba": "Acme",
"email": "joe@acme.com",
"idType": "ein",
"idNumber": "287654321",
"phone": "+16604491145",
"formationDate": "2018-02-18",
"website": "acme.com",
"about": "clinic for health issues",
"industry": "healthServices",
"disclosureStatus": "notStarted",
"address": {
  "addressType": "mailing",
  "line1": "123  Main  St",
  "line2": "",
  "locality": "New York",
  "adminArea": "NY",
  "country": "US",
  "postalCode": "10001"
},
"kyb": {
  "id": "kyb-d85f7f4e-4a54-4754-8468-7ff344fca0e5",
  "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
  "status": "notStarted",
  "reviewCode": "",
  "reviewMessage": "",
  "results": {
    "fraud": "notStarted",
    "address": "notStarted",
    "businessName": "notStarted",
    "personName": "notStarted"
  },
  "createdAt": "2021-03-22T21:41:13Z",
  "modifiedAt": "2021-03-22T21:41:13Z"
},
"createdAt": "2021-03-22T21:40:44Z",
"modifiedAt": "2021-03-22T21:40:44Z",
"programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
"createdPersonId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5"
}
Copied!

List all Businesses
Retrieves list of all the businesses associated to the person by passing the person id parameter.

ENDPOINT
GET /v1/business?personId={{personId}}
RESPONSE
{
 "total": 1,
 "data": [
   {
     "id": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
     "personId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
     "legalName": "Acme LLC",
     "entityType": "limitedLiabilityCompany",
     "dba": "Acme",
     "email": "joe@acme.com",
     "idType": "ein",
     "idNumber": "287654321",
     "phone": "+16604491145",
     "formationDate": "2018-02-18",
     "website": "acme.com",
     "about": "clinic for health issues",
     "industry": "healthServices",
     "disclosureStatus": "notStarted",
     "address": {
       "addressType": "mailing",
       "line1": "123  Main  St",
       "line2": "",
       "locality": "New York",
       "adminArea": "NY",
       "country": "US",
       "postalCode": "10001"
     },
     "kyb": {
       "id": "kyb-d85f7f4e-4a54-4754-8468-7ff344fca0e5",
       "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
       "status": "notStarted",
       "reviewCode": "",
       "reviewMessage": "",
       "results": {
         "fraud": "notStarted",
         "address": "notStarted",
         "businessName": "notStarted",
         "personName": "notStarted"
       },
       "createdAt": "2021-03-22T21:41:13Z",
       "modifiedAt": "2021-03-22T21:41:13Z"
     },
     "createdAt": "2021-03-22T21:40:44Z",
     "modifiedAt": "2021-03-22T21:40:44Z",
     "programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
     "createdPersonId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5"
   }
 ]
}
Copied!

Submit a KYB
After collecting the business's info, the business must meet the country's requirements to open a bank account. This business verification is called Know Your Business (KYB). Submit the business for a KYB verification using this API.

ENDPOINT
POST /v1/business/:id/kyb
RESPONSE
{
 "id": "kyb-d85f7f4e-4a54-4754-8468-7ff344fca0e5",
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "status": "submitted",
 "reviewCode": "",
 "reviewMessage": "",
 "results": {
   "fraud": "notStarted",
   "address": "notStarted",
   "businessName": "notStarted",
   "personName": "notStarted"
 },
 "createdAt": "2021-03-22T21:41:13Z",
 "modifiedAt": "2021-03-22T21:52:12Z"
}
Copied!

Retrieve a KYB
Retrieves the business's KYB information by passing the business id.

ENDPOINT
POST /v1/business/:id/kyb
RESPONSE
{
 "id": "kyb-d85f7f4e-4a54-4754-8468-7ff344fca0e5",
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "status": "approved",
 "reviewCode": "",
 "reviewMessage": "",
 "results": {
   "fraud": "approved",
   "address": "approved",
   "businessName": "approved",
   "personName": "approved"
 },
 "createdAt": "2021-03-22T21:41:13Z",
 "modifiedAt": "2021-03-22T21:52:12Z"
}
Copied!

Owner

Owner is an individual that has at least 25% ownership of a business. Owner also needs to go through a KYC process (just like a person). In order to comply with beneficial ownership information requirements, financial institutions have to identify and verify the identity of any individual who owns 25 percent or more of a legal entity (beneficial owner), and any individual who controls the legal entity (control person).

The Owner object

Field Type Optional Description
id string unique id of the owner created
businessId string unique id of the owner's business
isControlPerson boolean Yes true if this owner is a control person of the business
ownership string ownership percentage in the business
title string specify the title of the owner
person object see The Person sub-object
createdAt string time at which the owner object was created
modifiedAt string time at which the owner object was modified

Create an Owner
Creates an owner by passing the required owner information.

ENDPOINT
POST /v1/owner
REQUEST
{
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "person": {
   "firstName": "Jane",
   "middleName": "Jason",
   "lastName": "Doe",
   "phone": "+19418405934",
   "email": "jane.doe@gmail.com",
   "dateOfBirth": "1974-04-22",
   "idType": "ssn",
   "idNumber": "287654321",
   "address": {
     "addressType": "mailing",
     "line1": "123  Main  St",
     "line2": "",
     "city": "New York",
     "state": "NY",
     "country": "US",
     "postalCode": "10001"
   }
 },
 "ownership": "50",
 "title": "manager"
}
Copied!
RESPONSE
{
 "id": "own-57c1e43d-10b4-4c98-8f88-4e71354e0602",
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "isControlPerson": false,
 "ownership": "50",
 "title": "manager",
 "person": {
   "id": "per-4c404992-81ea-401e-a789-12b84edfb30f",
   "firstName": "Jane",
   "middleName": "Jason",
   "lastName": "Doe",
   "phone": "+19418405934",
   "phoneVerified": false,
   "email": "jane.doe@gmail.com",
   "emailVerified": false,
   "dateOfBirth": "1974-04-22",
   "idNumberLast4": "",
   "idType": "ein",
   "idNumber": "287654321",
   "address": {
     "addressType": "mailing",
     "line1": "777  Brockton  Ave",
     "line2": "",
     "locality": "Abington",
     "adminArea": "MA",
     "country": "US",
     "postalCode": "02351"
   },
   "kyc": {
     "id": "kyc-103230d7-d004-47d8-b449-7c7f64c76c8c",
     "personId": "per-4c404992-81ea-401e-a789-12b84edfb30f",
     "status": "notStarted",
     "reviewMessage": "",
     "results": {
       "idv": "notStarted",
       "address": "notStarted",
       "dateOfBirth": "notStarted",
       "fraud": "notStarted"
     },
     "createdAt": "2021-03-23T05:05:20Z",
     "modifiedAt": "2021-03-23T05:05:20Z"
   },
   "programId": "",
   "createdAt": "2021-03-23T05:04:51Z",
   "modifiedAt": "2021-03-23T05:04:51Z"
 },
 "createdAt": "2021-03-23T05:04:51Z",
 "modifiedAt": "2021-03-23T05:04:51Z"
}
Copied!

Update an Owner
Updates the owner information by passing the owner id. You can only update:
- ownership percentage
- title
- if owner is control person

ENDPOINT
PATCH /v1/owner/:id
REQUEST
{
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "ownership": "25",
 "title": "manager"
}
Copied!
RESPONSE
{
 "id": "own-57c1e43d-10b4-4c98-8f88-4e71354e0602",
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "isControlPerson": false,
 "ownership": "25",
 "title": "manager",
 "person": {
   "id": "per-4c404992-81ea-401e-a789-12b84edfb30f",
   "firstName": "Jane",
   "middleName": "Jason",
   "lastName": "Doe",
   "phone": "+19418405934",
   "phoneVerified": false,
   "email": "jane.doe@gmail.com",
   "emailVerified": false,
   "dateOfBirth": "1970-01-01",
   "idNumberLast4": "",
   "idType": "ein",
   "idNumber": "287654321",
   "address": {
     "addressType": "legal",
     "line1": "777  Brockton  Ave",
     "line2": "",
     "locality": "Abington",
     "adminArea": "MA",
     "country": "US",
     "postalCode": "02351"
   },
   "kyc": {
     "id": "kyc-103230d7-d004-47d8-b449-7c7f64c76c8c",
     "personId": "per-4c404992-81ea-401e-a789-12b84edfb30f",
     "status": "notStarted",
     "reviewMessage": "",
     "results": {
       "idv": "notStarted",
       "address": "notStarted",
       "risk": "notStarted",
       "fraud": "notStarted"
     },
     "createdAt": "2021-03-23T05:05:20Z",
     "modifiedAt": "2021-03-23T05:05:20Z"
   },
   "programId": "",
   "createdAt": "2021-03-23T05:04:51Z",
   "modifiedAt": "2021-03-23T05:09:11Z"
 },
 "createdAt": "2021-03-23T05:04:51Z",
 "modifiedAt": "2021-03-23T05:09:11Z"
}
Copied!

Retrieve an Owner
Retrieves the owner information by passing the owner id.

ENDPOINT
GET /v1/owner/:id
RESPONSE
{
 "id": "own-57c1e43d-10b4-4c98-8f88-4e71354e0602",
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "isControlPerson": false,
 "ownership": "25",
 "title": "manager",
 "person": {
   "id": "per-4c404992-81ea-401e-a789-12b84edfb30f",
   "firstName": "Jane",
   "middleName": "Jason",
   "lastName": "Doe",
   "phone": "+19418405934",
   "phoneVerified": false,
   "email": "jane.doe@gmail.com",
   "emailVerified": false,
   "dateOfBirth": "1974-04-22",
   "idNumberLast4": "",
   "idType": "ein",
   "idNumber": "287654321",
   "address": {
     "addressType": "legal",
     "line1": "777  Brockton  Ave",
     "line2": "",
     "locality": "Abington",
     "adminArea": "MA",
     "country": "US",
     "postalCode": "02351"
   },
   "kyc": {
     "id": "kyc-103230d7-d004-47d8-b449-7c7f64c76c8c",
     "personId": "per-4c404992-81ea-401e-a789-12b84edfb30f",
     "status": "notStarted",
     "reviewMessage": "",
     "results": {
       "idv": "notStarted",
       "address": "notStarted",
       "risk": "notStarted",
       "fraud": "notStarted"
     },
     "createdAt": "2021-03-23T05:05:20Z",
     "modifiedAt": "2021-03-23T05:05:20Z"
   },
   "programId": "",
   "createdAt": "2021-03-23T05:04:51Z",
   "modifiedAt": "2021-03-23T05:09:11Z"
 },
 "createdAt": "2021-03-23T05:04:51Z",
 "modifiedAt": "2021-03-23T05:09:11Z"
}
Copied!

Retrieve all Owners
Retrieves all the owners of the business by passing the business id parameter.

ENDPOINT
GET /v1/owner?businessId={{businessId}}
RESPONSE
{
 "total": 1,
 "data": [
   {
     "id": "own-4cff06c0-8b77-4d86-a775-cf8c9ba35b70",
     "businessId": "bus-2bc2be0f-e6b7-459c-83f7-ca43febc2915",
     "isControlPerson": true,
     "ownership": "25",
     "title": "manager",
     "person": {
       "id": "per-1b67f3eb-f97d-4a5e-9049-6c78708eb311",
       "firstName": "John",
       "middleName": "",
       "lastName": "Doe",
       "phone": "+19418405934",
       "phoneVerified": false,
       "email": "john.doe@gmail.com",
       "emailVerified": false,
       "dateOfBirth": "1974-01-25",
       "idType": "ssn",
       "idNumber": "223902234",
       "address": {
         "addressType": "mailing",
         "line1": "123  Main  St",
         "line2": "",
         "city": "New York",
         "state": "NY",
         "country": "US",
         "postalCode": "10001"
       },
       "kyc": {
         "id": "kyc-967298f4-52bd-45e8-84b4-f1a94c7866ca",
         "personId": "per-1b67f3eb-f97d-4a5e-9049-6c78708eb311",
         "status": "approved",
         "reviewCode": "",
         "reviewMessage": "",
         "results": {
           "idv": "approved",
           "address": "approved",
           "dateOfBirth": "approved",
           "fraud": "approved"
         },
         "createdAt": "2021-03-27T03:16:37Z",
         "modifiedAt": "2021-03-27T03:18:48Z"
       },
       "programId": "prg-4865f43a-0400-47e4-ab5b-8a06283944a3",
       "createdAt": "2021-03-27T03:19:25Z",
       "modifiedAt": "2021-03-27T03:21:32Z"
     },
     "createdAt": "2021-03-27T03:19:25Z",
     "modifiedAt": "2021-03-27T03:21:32Z"
   }
 ]
}
Copied!

Bank Accounts

Bank Account is an account that:
- allows the account holder to store, spend, receive and send funds.
- contains an account number and routing number (of the bank).
- includes $250,000 in FDIC insurance.
- an individual (person) can open upon Person's KYC approval.
- a business (person) can open upon Person's KYC (applicant) and Business's KYB approval.

The Account object

Field Type Optional Description
id string unique id of the bank account created
businessId string unique id of the business, in case of a business bank account
label string account label (for example: Payroll)
routingNumber string 9 digit routing number of the bank account
accountNumber string 16 digit account number of the bank account
status boolean status of the bank account with possible values:
- active
- debitBlocked
- creditBlocked
- blocked
- closed
type string type of the bank account with possible values:
- businessChecking
- personalChecking
programId string program id that this bank account belongs to
isVerified boolean true if the bank account is fully verified by compliance
verifiedAt string timestamp of full verification by compliance
acceptedTerms boolean true if the account terms were accepted during account creation
interest string interest percentage if an interest earning account
fees string fees charged per month if it is a fee based account
currency enum currency of the bank account, currently supported:
- USD
availableBalance string available balance in the bank account
pendingDebit string pending debits (money going out) from the bank account
pendingCredit string pending credits (money coming in) in to the bank account
sponsorBankName string Test Bank.
createdAt string time at which the account object was created
modifiedAt string time at which the account object was modified
createdPersonId string person id of the person that created the bank account
accountInterestFrequency string frequency at which interest is paid out (if any)

Create an Account
Creates an account by passing the required account information.

ENDPOINT
POST /v1/account
REQUEST
{
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "label": "Payroll",
 "acceptedTerms": true,
 "createPhysicalCard": true,
 "type": "businessChecking"
}
Copied!
RESPONSE
{
 "id": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "label": "Payroll",
 "routingNumber": "987654321",
 "accountNumber": "9871288050011",
 "status": "active",
 "type": "businessChecking",
 "programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
 "isVerified": false,
 "verifiedAt": "",
 "acceptedTerms": true,
 "interest": "0.00",
 "fees": "0.00",
 "currency": "USD",
 "availableBalance": "0.00",
 "pendingDebit": "0.00",
 "pendingCredit": "0.00",
 "sponsorBankName": "Test Bank",
 "createdAt": "2021-03-23T05:18:58Z",
 "modifiedAt": "2021-03-23T05:18:58Z",
 "createdPersonId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
 "accountInterestFrequency": "monthly"
}
Copied!

Update an Account
Updates the account information by passing the account id. You can only update the account label.

ENDPOINT
PATCH /v1/account/:id
REQUEST
{
 "label": "Spend Account"
}
Copied!
RESPONSE
{
 "id": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "label": "Spend Account",
 "routingNumber": "987654321",
 "accountNumber": "9871288050011",
 "status": "active",
 "type": "businessChecking",
 "programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
 "isVerified": false,
 "verifiedAt": "0001-01-01T00:00:00Z",
 "acceptedTerms": true,
 "interest": "0.00",
 "fees": "0.00",
 "currency": "USD",
 "availableBalance": "0.00",
 "pendingDebit": "0.00",
 "pendingCredit": "0.00",
 "sponsorBankName": "Test Bank",
 "createdAt": "2021-03-23T05:18:58Z",
 "modifiedAt": "2021-03-23T05:18:58Z",
 "createdPersonId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
 "accountInterestFrequency": "monthly"
}
Copied!

Retrieve an Account
Retrieves the account information by passing the account id.

ENDPOINT
GET /v1/account/:id
RESPONSE
{
 "id": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "label": "Spend Account",
 "routingNumber": "987654321",
 "accountNumber": "9871288050011",
 "status": "active",
 "type": "businessChecking",
 "programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
 "isVerified": false,
 "verifiedAt": "",
 "acceptedTerms": true,
 "interest": "0.00",
 "fees": "0.00",
 "currency": "USD",
 "availableBalance": "0.00",
 "pendingDebit": "0.00",
 "pendingCredit": "0.00",
 "sponsorBankName": "Test Bank",
 "createdAt": "2021-03-23T05:18:58Z",
 "modifiedAt": "2021-03-23T05:18:58Z",
 "createdPersonId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5"
 "accountInterestFrequency": "monthly"
}
Copied!

List all Accounts
Retrieves list of all bank accounts that belong to a business or a person. You can use the businessId or personId parameter to list the accounts.

ENDPOINT
GET /v1/account?businessId={{businessID}}
RESPONSE
{
 "total": 1,
 "data": [
   {
     "id": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
     "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
     "label": "Spend Account",
     "routingNumber": "987654321",
     "accountNumber": "9871288050011",
     "status": "active",
     "type": "businessChecking",
     "programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
     "isVerified": false,
     "verifiedAt": "0001-01-01T00:00:00Z",
     "acceptedTerms": true,
     "interest": "0.00",
     "fees": "0.00",
     "currency": "USD",
     "availableBalance": "0.00",
     "pendingDebit": "0.00",
     "pendingCredit": "0.00",
     "sponsorBankName": "Test Bank",
     "createdAt": "2021-03-23T05:18:58Z",
     "modifiedAt": "2021-03-23T05:18:58Z",
     "createdPersonId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5"
     "accountInterestFrequency": "monthly"
   }
 ]
}
Copied!

List all Statements
Retrieves list of all account statements by passing the account id.

ENDPOINT
GET /v1/account/:id/statement
RESPONSE
{
 "total": 2,
 "data": [
   {
     "month": 2,
     "year": 2021,
     "createdAt": "2021-03-01T00:00:00Z"
   },
   {
     "month": 1,
     "year": 2021,
     "createdAt": "2021-02-01T00:00:00Z"
   }
 ]
}
Copied!

Retrieve a Statement
Retrieves the account statement by passing the account id.
- pass the year and month parameter as yyyy/mm
- pass the export parameter as export=json or export=pdf
- you get a PDF file as a response (content type is application-pdf) If export=pdf
- you get a JSON response (content type is application-json) if export=json

ENDPOINT
GET /v1/account/:id/statement/2021/3?export=json
RESPONSE
{
 "accountId": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
 "accountNumber": "9871288050011",
 "routingNumber": "987654321",
 "label": "Spend Account",
 "openingBalance": "0.00",
 "closingBalance": "0.00",
 "startDate": "2021-03-01",
 "endDate": "2021-03-31",
 "transactions": []
}
Copied!

Contacts

Contact is a person or business that you'd send money to or receive money from. A Bank Account can have several contacts. You can:
- send money to a contact
- receive money from a contact
- manage list of all the contacts in the bank account

The Contact object

Field Type Optional Description
id string unique id of the contact created
accountId string unique id of the bank account to which the contact belongs
name string name of the contact, either full name of person or legal name of business
email string Yes email address of the contact
phone string Yes mobile phone of the contact
status enum status of the contact with possible values:
- active
- deleted
intrabank object Yes see The Intrabank sub-object
ach object Yes see The ACH sub-object
wire object Yes see The Domestic Wire sub-object
check object Yes see The Check sub-object
createdAt string time at which the contact object was created
modifiedAt string time at which the contact object was modified

The Intrabank sub-object

Field Type Optional Description
accountNumber string intrabank account number of the contact

The ACH sub-object

Field Type Optional Description
accountNumber string bank account number of the contact
routingNumber string ACH routing number of the contact's bank
accountType string type of the contact's bank account with possible values:
- businessChecking
- personalChecking
- businessSavings
- personalSavings
bankName string bank name of contact's bank

The Domestic Wire sub-object

Field Type Optional Description
accountNumber string bank account number of the contact
routingNumber string ACH routing number of the contact's bank
accountType string type of the contact's bank account with possible values:
- businessChecking
- personalChecking
- businessSavings
- personalSavings
bankName string bank name of contact's bank
address object see The Address sub-object

The Check sub-object

Field Type Optional Description
addressType enum address type with possible values:
- check
line1 string line 1 of the address
line2 string Yes line 2 of the address
city string city of the address
state string two letter abbreviation of the US state (ex: CA)
country string two letter abbreviation of the country (ex: US)
postalCode string postal code of the address

Create a Contact
Creates a contact by passing the required contact information.

ENDPOINT
POST /v1/contact
REQUEST
{
 "accountId": "{{accountId}}",
 "name": "Bright Light LLC",
 "email": "dwightlight@gmail.com",
 "phone": "+18467051332",
 "intrabank": {
   "accountNumber": "9990001149517700"
 },
 "ach": {
   "accountNumber": "1098324502",
   "routingNumber": "121042882",
   "accountType": "businessChecking",
   "bankName": "Wells Fargo"
 },
 "wire": {
   "domestic": {
     "accountNumber": "1098324502",
     "routingNumber": "121042882",
     "accountType": "businessChecking",
     "bankName": "Wells Fargo",
     "address": {
       "addressType": "wire",
       "line1": "123  Main  St",
       "line2": "",
       "city": "New York",
       "state": "NY",
       "country": "US",
       "postalCode": "10001"
     }
   }
 },
 "check": {
   "address": {
     "addressType": "check",
     "line1": "123  Main  St",
     "line2": "",
     "city": "New York",
     "state": "NY",
     "country": "US",
     "postalCode": "10001"
   }
 }
}
Copied!
RESPONSE
{
 "id": "con-76b5345f-e201-494e-ab72-88224215a894",
 "accountId": "acc-0a5d1eff-9efd-4962-b340-edf553ff3ea0",
 "name": "Bright Light LLC",
 "email": "dwightlight@gmail.com",
 "phone": "+18467051332",
 "status": "active",
 "intrabank": {
   "accountNumber": "9990001149517700"
 },
 "ach": {
   "accountNumber": "1098324502",
   "routingNumber": "121042882",
   "accountType": "businessChecking",
   "bankName": "Wells Fargo"
 },
 "createdAt": "2021-06-10T19:03:56Z",
 "modifiedAt": "2021-06-10T19:03:56Z",
 "wire": {
   "domestic": {
     "accountNumber": "1098324502",
     "routingNumber": "121042882",
     "accountType": "businessChecking",
     "bankName": "Wells Fargo",
     "address": {
       "addressType": "wire",
       "line1": "123  Main  St",
       "line2": "",
       "city": "New York",
       "state": "NY",
       "country": "US",
       "postalCode": "10001"
     }
   },
   "international": null
 },
 "check": {
   "address": {
     "addressType": "check",
     "line1": "123  Main  St",
     "line2": "",
     "city": "New York",
     "state": "NY",
     "country": "US",
     "postalCode": "10001"
   }
 },
 "card": null
}
Copied!

Update a Contact
Updates the contact information by passing the contact id. You can only update the:
- name
- email
- phone
- status
- intrabank object
- ach object

ENDPOINT
PATCH /v1/contact/:id
REQUEST
{
 "intrabank": {
   "accountNumber": "9871111217366712"
 }
}
Copied!
RESPONSE
{
 "id": "con-ac189b88-1659-46df-8732-65883e73d394",
 "accountId": "acc-d16d726a-1245-4834-9d8f-8d8637ac1ca8",
 "name": "SnackCo LLC",
 "email": "mason@snack.co",
 "phone": "+18467051373",
 "status": "active",
 "intrabank": {
   "accountNumber": "9871111217366712"
 },
 "ach": {
   "accountNumber": "211462425",
   "routingNumber": "123456789",
   "accountType": "businessChecking",
   "bankName": "Wells Fargo"
 },
 "createdAt": "2021-03-23T23:31:46Z",
 "modifiedAt": "2021-03-23T23:31:46Z"
}
Copied!

Retrieve a Contact
Retrieves the contact information by passing the contact id.

ENDPOINT
GET /v1/contact/:id
RESPONSE
{
 "id": "con-ac189b88-1659-46df-8732-65883e73d394",
 "accountId": "acc-d16d726a-1245-4834-9d8f-8d8637ac1ca8",
 "name": "SnackCo LLC",
 "email": "mason@snack.co",
 "phone": "+18467051373",
 "status": "active",
 "intrabank": {
   "accountNumber": "9871111217366712"
 },
 "ach": {
   "accountNumber": "1098324501",
   "routingNumber": "121042882",
   "accountType": "businessChecking",
   "bankName": "Wells Fargo"
 },
 "createdAt": "2021-03-23T23:31:46Z",
 "modifiedAt": "2021-03-23T23:31:46Z"
}
Copied!

List all Contacts
Retrieves list of all contacts that belong to a bank account. You can use the accountId parameter to list the contacts.

ENDPOINT
GET v1/contact?accountId={{accountId}}
RESPONSE
{
 "total": 1,
 "data": [
   {
     "id": "con-ac189b88-1659-46df-8732-65883e73d394",
     "accountId": "acc-d16d726a-1245-4834-9d8f-8d8637ac1ca8",
     "name": "SnackCo LLC",
     "email": "mason@snack.co",
     "phone": "+18467051373",
     "status": "active",
     "intrabank": {
       "accountNumber": "9871111217366712"
     },
     "ach": {
       "accountNumber": "1098324501",
       "routingNumber": "121042882",
       "accountType": "businessChecking",
       "bankName": "Wells Fargo"
     },
     "createdAt": "2021-03-23T23:31:46Z",
     "modifiedAt": "2021-03-23T23:31:46Z"
   }
 ]
}
Copied!

Delete a Contact
Delete a contact by removing it from the account. 200 OK success status response code indicates that the contact was removed from the account.

ENDPOINT
DELETE /v1/contact/:id
RESPONSE
{
   "message": "Contact removed."
}
Copied!

Send

Send is collection of endpoints with which you can send money to a contact. In response to a send, you receive the confirmation via a Transfer object. Currently, the supported send endpoints are Intrabank (/send/intrabank) and ACH (/send/ach). Wire, RTP and Digital Checks are coming soon!

The Transfer object

Field Type Optional Description
id string unique id of the transfer
accountId string unique id of the bank account associated with the transfer
contactId string unique id of the bank account associated with the transfer
contactName string name of the contact, either full name of person or legal name of business
contactAccountNumber string account number of the contact
contactRoutingNumber string Yes routing number of the contact
contactAddress string Yes status of the contact
amount string amount of the transfer
status enum status of the transfer with possible values:
- completed
- pending
- settled
- canceled
- refund
- declined
description string description of the transfer.
txnType enum transaction type of the transfer with possible values:
- credit
- debit
transferType enum transfer type with possible values:
- intraBank
- ach
- card
- physicalCheck
- domesticWire
transferSubType enum transfer sub type with possible values:
- originated
- received
- auth
- authUpdate
- reversal
- refund
- interest
- fees
- penalty
- promotionalCredit
- accountCreationCredit
createdAt string time at which the transfer object was created
modifiedAt string time at which the transfer object was modified
TransferredAt string time at which the money was transfered

Send an Intrabank Transfer
Sends an intrabank money transfer to a contact by passing the required account id, contact id, amount and description. Response is a transfer object.

ENDPOINT
POST v1/send/intrabank
REQUEST
{
 "accountId": "{{accountId}}",
 "contactId": "{{contactId}}",
 "amount": "10.00",
 "description": "Payment for snacks"
}
Copied!
RESPONSE
{
 "id": "tra-e19f7d03-d1bd-41a4-81ea-4e3c553c7787",
 "accountId": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
 "contactId": "con-ac189b88-1659-46df-8732-65883e73d394",
 "contactName": "SnackCo LLC",
 "contactAccountNumber": "9871111217366712",
 "contactRoutingNumber": "",
 "contactAddress": null,
 "amount": "10.00",
 "status": "completed",
 "description": "Payment for snacks",
 "txnType": "debit",
 "transferType": "intrabank",
 "transferSubType": "paymentToContact",
 "createdAt": "2021-03-24T00:00:03.155774171Z",
 "modifiedAt": "2021-03-24T00:00:03.155774171Z",
 "transferredAt": "2021-03-24T00:00:03.155774171Z"
}
Copied!

List all Intrabank Transfers Sent
Retrieves list of all intrabank transfers sent from a bank account. You can use the accountId parameter to list the intrabanks transfers.

ENDPOINT
GET v1/send/intrabank?accountId={{accountId}}
RESPONSE
{
 "total": 1,
 "data": [
   {
     "id": "tra-e19f7d03-d1bd-41a4-81ea-4e3c553c7787",
     "accountId": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
     "contactId": "con-ac189b88-1659-46df-8732-65883e73d394",
     "contactName": "SnackCo LLC",
     "contactAccountNumber": "9871111217366712",
     "contactRoutingNumber": "",
     "contactAddress": null,
     "amount": "10.00",
     "status": "completed",
     "description": "Payment for snacks",
     "txnType": "debit",
     "transferType": "intrabank",
     "transferSubType": "paymentToContact",
     "createdAt": "2021-03-24T00:00:03Z",
     "modifiedAt": "2021-03-24T00:00:03Z",
     "transferredAt": "2021-03-24T00:00:03Z"
   }
 ]
}
Copied!

Send an ACH Transfer
Sends an ACH money transfer to a contact by passing the required account id, contact id, amount and description. Response is a transfer object.

ENDPOINT
POST v1/send/ach
REQUEST
{
 "accountId": "{{accountId}}",
 "contactId": "{{contactId}}",
 "amount": "50.00",
 "description": "Payment for food"
}
Copied!
RESPONSE
{
 "id": "tra-e19f7d03-d1bd-41a4-81ea-4e3c553c7787",
 "accountId": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
 "contactId": "con-ac189b88-1659-46df-8732-65883e73d394",
 "contactName": "SnackCo LLC",
 "contactAccountNumber": "211462425",
 "contactRoutingNumber": "123456789",
 "contactAddress": null,
 "amount": "50.00",
 "status": "completed",
 "description": "Payment for food",
 "txnType": "debit",
 "transferType": "ach",
 "transferSubType": "paymentToContact",
 "createdAt": "2021-03-24T00:00:03.155774171Z",
 "modifiedAt": "2021-03-24T00:00:03.155774171Z",
 "transferredAt": "2021-03-24T00:00:03.155774171Z"
}
Copied!

List all ACH Transfers Sent
Retrieves list of all ACH transfer sent from a bank account. You can use the accountId parameter to list the ACH transfers.

ENDPOINT
GET v1/send/ach?accountId={{accountId}}
RESPONSE
{
 "total": 1,
 "data": [
   {
     "id": "tra-e19f7d03-d1bd-41a4-81ea-4e3c553c7787",
     "accountId": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
     "contactId": "con-ac189b88-1659-46df-8732-65883e73d394",
     "contactName": "SnackCo LLC",
     "contactAccountNumber": "211462425",
     "contactRoutingNumber": "987654321",
     "contactAddress": null,
     "amount": "50.00",
     "status": "completed",
     "description": "Payment for food",
     "txnType": "debit",
     "transferType": "ach",
     "transferSubType": "paymentToContact",
     "createdAt": "2021-03-24T00:00:03Z",
     "modifiedAt": "2021-03-24T00:00:03Z",
     "transferredAt": "2021-03-24T00:00:03Z"
   }
 ]
}
Copied!

Send a Wire Transfer
Sends an Wire money transfer to a contact by passing the required account id, contact id, type, amount and description. Response is a transfer object. Currently, the Solid Platform only support domestic wire transfers (type: domestic).

ENDPOINT
POST v1/send/wire
REQUEST
{
 "accountId": "{{accountId}}",
 "contactId": "{{contactId}}",
 "type": "domestic",
 "amount": "250.00",
 "description": "Downpayment"
}
Copied!
RESPONSE
{
 "id": "tra-c27a1112-fde5-46d8-badd-6a2356303da2",
 "accountId": "acc-0a5d1eff-9efd-4962-b340-edf553ff3ea0",
 "contactId": "con-84ad0271-99ca-42a8-8a0f-c0a69f95136b",
 "name": "Dwight Light LLC",
 "accountNumber": "1098324501",
 "routingNumber": "121042882",
 "address": {
   "addressType": "wire",
   "line1": "123  Main  St",
   "line2": "",
   "city": "New York",
   "state": "NY",
   "country": "US",
   "postalCode": "10001"
 },
 "amount": "250.00",
 "status": "pending",
 "description": "Downpayment",
 "txnType": "debit",
 "transferType": "domesticWire",
 "transferSubType": "originated",
 "createdAt": "2021-06-10T08:29:19Z",
 "modifiedAt": "2021-06-10T08:29:19Z",
 "transferredAt": "2021-06-10T08:29:19Z",
 "accountType": "businessChecking",
 "iban": "",
 "valid": "",
 "parentTransferId": ""
}
Copied!

List all Wire Transfers Sent
Retrieves list of all Domestic Wire transfers sent from a bank account. You can use the accountId parameter to list the Domestic Wire transfers.

ENDPOINT
GET v1/send/wire?accountId={{accountId}}
RESPONSE
{
 "total": 1,
 "data": [
   {
     "id": "tra-c27a1112-fde5-46d8-badd-6a2356303da2",
     "accountId": "acc-0a5d1eff-9efd-4962-b340-edf553ff3ea0",
     "contactId": "con-84ad0271-99ca-42a8-8a0f-c0a69f95136b",
     "name": "Dwight Light LLC",
     "accountNumber": "1098324501",
     "routingNumber": "121042882",
     "address": {
       "addressType": "wire",
       "line1": "123  Main  St",
       "line2": "",
       "city": "New York",
       "state": "NY",
       "country": "US",
       "postalCode": "10001"
     },
     "amount": "250.00",
     "status": "pending",
     "description": "Downpayment",
     "txnType": "debit",
     "transferType": "domesticWire",
     "transferSubType": "originated",
     "createdAt": "2021-06-10T08:29:19Z",
     "modifiedAt": "2021-06-10T08:29:19Z",
     "transferredAt": "2021-06-10T08:29:19Z",
     "accountType": "businessChecking",
     "iban": "",
     "valid": "",
     "parentTransferId": ""
   }
 ]
}
Copied!

Send a Check
Sends a physical check to a contact by passing the required account id, contact id, type, amount and description. It takes 3-5 business days to print and deliver the check to the address. Response is a transfer object. Currently, the Solid Platform only support physical checks (type: physical).

ENDPOINT
POST v1/send/check
REQUEST
{
 "accountId": "{{accountId}}",
 "contactId": "{{contactId}}",
 "type": "physical",
 "amount": "80.00",
 "description": "Payment for food"
}
Copied!
RESPONSE
{
 "id": "tra-5c84aaaf-b347-43c4-a2d2-0c913627de48",
 "accountId": "acc-0a5d1eff-9efd-4962-b340-edf553ff3ea0",
 "contactId": "con-24c59696-2ad5-4698-baa3-2da637bb6fae",
 "name": "Dwight Light LLC",
 "accountNumber": "",
 "routingNumber": "",
 "address": {
   "addressType": "check",
   "line1": "123  Main  St",
   "line2": "",
   "city": "New York",
   "state": "NY",
   "country": "US",
   "postalCode": "10001"
 },
 "amount": "80.00",
 "status": "completed",
 "description": "Payment for food",
 "txnType": "debit",
 "transferType": "physicalCheck",
 "transferSubType": "originated",
 "createdAt": "2021-06-10T08:11:07Z",
 "modifiedAt": "2021-06-10T08:11:07Z",
 "transferredAt": "2021-06-10T08:11:07Z",
 "accountType": "",
 "iban": "",
 "valid": "",
 "parentTransferId": ""
}
Copied!

List all Checks Sent
Retrieves list of all checks sent from a bank account. You can use the accountId parameter to list the checks sent.

ENDPOINT
GET v1/send/check?accountId={{accountId}}
RESPONSE
{
 "total": 1,
 "data": [
   {
     "id": "tra-5c84aaaf-b347-43c4-a2d2-0c913627de48",
     "accountId": "acc-0a5d1eff-9efd-4962-b340-edf553ff3ea0",
     "contactId": "con-24c59696-2ad5-4698-baa3-2da637bb6fae",
     "name": "Dwight Light LLC",
     "accountNumber": "",
     "routingNumber": "",
     "address": {
       "addressType": "check",
       "line1": "123  Main  St",
       "line2": "",
       "city": "New York",
       "state": "NY",
       "country": "US",
       "postalCode": "10001"
     },
     "amount": "80.00",
     "status": "completed",
     "description": "Payment for food",
     "txnType": "debit",
     "transferType": "physicalCheck",
     "transferSubType": "originated",
     "createdAt": "2021-06-10T08:11:07Z",
     "modifiedAt": "2021-06-10T08:11:07Z",
     "transferredAt": "2021-06-10T08:11:07Z",
     "accountType": "",
     "iban": "",
     "valid": "",
     "parentTransferId": ""
   }
 ]
}
Copied!

Receive

Receive is collection of endpoints with which you can receive money from a contact. In response to a receive, you receive the confirmation via a Transfer object. Currently, the supported send endpoints are Intrabank (/receive/intrabank), ACH (/receive/ach) and Check Deposit (/receive/check).

The Transfer object

Field Type Optional Description
id string unique id of the transfer
accountId string unique id of the bank account associated with the transfer
contactId string unique id of the bank account associated with the transfer
contactName string name of the contact, either full name of person or legal name of business
contactAccountNumber string account number of the contact
contactRoutingNumber string Yes routing number of the contact
contactAddress string Yes status of the contact
amount string amount of the transfer
status enum status of the transfer with possible values:
- completed
- pending
- settled
- canceled
- refund
- declined
description string description of the transfer.
txnType enum transaction type of the transfer with possible values:
- credit
- debit
transferType enum transfer type with possible values:
- intraBank
- ach
- card
- physicalCheck
- domesticWire
transferSubType enum transfer sub type with possible values:
- originated
- received
- auth
- authUpdate
- reversal
- refund
- interest
- fees
- penalty
- promotionalCredit
- accountCreationCredit
createdAt string time at which the transfer object was created
modifiedAt string time at which the transfer object was modified
TransferredAt string time at which the money was transfered

Receive an Intrabank Transfer
Receives an intrabank money transfer from a contact by passing the required account id, contact id, amount and description. Response is a transfer object.

ENDPOINT
POST v1/receive/intrabank
REQUEST
{
 "accountId": "{{accountId}}",
 "contactId": "{{contactId}}",
 "amount": "9.00",
 "description": "Invoice"
}
Copied!
RESPONSE
{
   "id": "tra-d18c41ea-6be3-40d5-8928-18470cacf679",
   "accountId": "acc-0a5d1eff-9efd-4962-b340-edf553ff3ea0",
   "contactId": "con-75eebd09-ef37-4aef-87c0-0f9b9884452f",
   "name": "Joe Smith",
   "accountNumber": "9990001114988896",
   "routingNumber": "",
   "address": {
       "addressType": "",
       "line1": "",
       "line2": "",
       "city": "",
       "state": "",
       "country": "",
       "postalCode": ""
   },
   "amount": "9.00",
   "status": "completed",
   "description": "Invoice",
   "txnType": "credit",
   "transferType": "intrabank",
   "transferSubType": "originated",
   "createdAt": "2021-07-03T07:10:19Z",
   "modifiedAt": "2021-07-03T07:10:19Z",
   "transferredAt": "2021-07-03T07:10:19Z",
   "accountType": "",
   "iban": "",
   "valid": "",
   "parentTransferId": ""
}
Copied!

List all Intrabank Transfers Received
Retrieves list of all intrabank transfers received in to a bank account. You can use the accountId parameter to list the intrabanks transfers.

ENDPOINT
GET v1/receive/intrabank?accountId={{accountId}}
RESPONSE
{
 "total": 1,
 "data": [
   {
     "id": "tra-d18c41ea-6be3-40d5-8928-18470cacf679",
     "accountId": "acc-0a5d1eff-9efd-4962-b340-edf553ff3ea0",
     "contactId": "con-75eebd09-ef37-4aef-87c0-0f9b9884452f",
     "name": "Joe Smith",
     "accountNumber": "9990001114988896",
     "routingNumber": "",
     "address": {
       "addressType": "",
       "line1": "",
       "line2": "",
       "city": "",
       "state": "",
       "country": "",
       "postalCode": ""
     },
     "amount": "9.00",
     "status": "completed",
     "description": "Invoice",
     "txnType": "credit",
     "transferType": "intrabank",
     "transferSubType": "originated",
     "createdAt": "2021-07-03T07:10:19Z",
     "modifiedAt": "2021-07-03T07:10:19Z",
     "transferredAt": "2021-07-03T07:10:19Z",
     "accountType": "",
     "iban": "",
     "valid": "",
     "parentTransferId": ""
   }
 ]
}
Copied!

Receive an ACH Transfer
Receives an ACH money transfer from a contact by passing the required account id, contact id, amount and description. Response is a transfer object.

ENDPOINT
POST v1/receive/ach
REQUEST
{
 "accountId": "{{accountId}}",
 "contactId": "{{contactId}}",
 "amount": "50.00",
 "description": "Invoice"
}
Copied!
RESPONSE
{
 "id": "tra-ca2b9aee-41bc-41ba-9dec-ba264a61f968",
 "accountId": "acc-0a5d1eff-9efd-4962-b340-edf553ff3ea0",
 "contactId": "con-75eebd09-ef37-4aef-87c0-0f9b9884452f",
 "name": "Joe Smith",
 "accountNumber": "1098324501",
 "routingNumber": "121042882",
 "address": {
   "addressType": "",
   "line1": "",
   "line2": "",
   "city": "",
   "state": "",
   "country": "",
   "postalCode": ""
 },
 "amount": "58.00",
 "status": "pending",
 "description": "Payment for food",
 "txnType": "credit",
 "transferType": "ach",
 "transferSubType": "originated",
 "createdAt": "2021-06-10T02:32:35Z",
 "modifiedAt": "2021-06-10T02:32:35Z",
 "transferredAt": "2021-06-10T02:32:35Z",
 "accountType": "businessChecking",
 "iban": "",
 "valid": "",
 "parentTransferId": ""
}
Copied!

List all ACH Transfers Received
Retrieves list of all ACH transfer received in to a bank account. You can use the accountId parameter to list the ACH transfers.

ENDPOINT
GET v1/receive/ach?accountId={{accountId}}
RESPONSE
{
 "total": 1,
 "data": [
   {
     "id": "tra-ca2b9aee-41bc-41ba-9dec-ba264a61f968",
     "accountId": "acc-0a5d1eff-9efd-4962-b340-edf553ff3ea0",
     "contactId": "con-75eebd09-ef37-4aef-87c0-0f9b9884452f",
     "name": "Joe Smith",
     "accountNumber": "1098324501",
     "routingNumber": "121042882",
     "address": {
       "addressType": "",
       "line1": "",
       "line2": "",
       "city": "",
       "state": "",
       "country": "",
       "postalCode": ""
     },
     "amount": "58.00",
     "status": "pending",
     "description": "Invoice",
     "txnType": "credit",
     "transferType": "ach",
     "transferSubType": "originated",
     "createdAt": "2021-06-10T02:32:35Z",
     "modifiedAt": "2021-06-10T02:32:35Z",
     "transferredAt": "2021-06-10T02:32:35Z",
     "accountType": "businessChecking",
     "iban": "",
     "valid": "",
     "parentTransferId": ""
   }
 ]
}
Copied!

Receive a Check Deposit
Deposits a physical check to a contact by passing the required account id, contact id, type, amount and description. It takes 3-5 business days for the credit to reflect in the account. Response is a transfer object. Currently, the Solid Platform only supports depositing physical checks (type: physical). Depositing checks is a two step process:
Step 1: Initiate a check deposit via POST /v1/receive/check
Step 2: Pass the front and back of the check as images via PATCH /v1/receive/check/{{transferId}}/files

ENDPOINT
POST v1/receive/check
REQUEST
{
 "accountId": "{{accountId}}",
 "contactId": "{{contactId}}",
 "amount": "158.00",
 "description": "Payment"
}
Copied!
RESPONSE
{
 "id": "tra-0257b05c-05fb-41f7-b287-bb3a6fa130f4",
 "accountId": "acc-0a5d1eff-9efd-4962-b340-edf553ff3ea0",
 "contactId": "con-75eebd09-ef37-4aef-87c0-0f9b9884452f",
 "name": "Brice",
 "accountNumber": "",
 "routingNumber": "",
 "address": {
   "addressType": "",
   "line1": "",
   "line2": "",
   "city": "",
   "state": "",
   "country": "",
   "postalCode": ""
 },
 "amount": "158.00",
 "status": "waiting for files",
 "description": "Payment",
 "txnType": "credit",
 "transferType": "physicalCheck",
 "transferSubType": "originated",
 "createdAt": "2021-07-03T07:21:58Z",
 "modifiedAt": "2021-07-03T07:21:58Z",
 "transferredAt": "2021-07-03T07:21:58Z",
 "accountType": "",
 "iban": "",
 "valid": "",
 "parentTransferId": ""
}
Copied!

Once the check deposit transfer object is created via the POST v1/receive/check, the transfer object is returned in the response with the status "waiting for files". Now, you move to Step 2, which is uploading the front and back of the check, by referencing the transferId via a PATCH.

Below file types are supported for Check files.
- jpg
- jpeg
- png
Max file size is 10MB for each file.

ENDPOINT
PATCH /v1/receive/check/{{transferId}}/files
REQUEST
curl --location --request PATCH 'https://test-api.solidfi.com/v1/receive/check/{{transferId}}/files' \
--header 'sd-api-key: {{api-key}}' \
--header 'sd-person-id: {{personId}}' \
--form 'front=@"/{{path}}/front.jpg"' \
--form 'back=@"/{{path}}/back.jpg"'
Copied!
RESPONSE
{
 "id": "tra-0257b05c-05fb-41f7-b287-bb3a6fa130f4",
 "accountId": "acc-0a5d1eff-9efd-4962-b340-edf553ff3ea0",
 "contactId": "con-75eebd09-ef37-4aef-87c0-0f9b9884452f",
 "name": "Brice",
 "accountNumber": "",
 "routingNumber": "",
 "address": {
   "addressType": "",
   "line1": "",
   "line2": "",
   "city": "",
   "state": "",
   "country": "",
   "postalCode": ""
 },
 "amount": "158.00",
 "status": "pending",
 "description": "Payment for food",
 "txnType": "credit",
 "transferType": "physicalCheck",
 "transferSubType": "originated",
 "createdAt": "2021-07-03T07:21:58Z",
 "modifiedAt": "2021-07-03T07:40:05Z",
 "transferredAt": "2021-07-03T07:21:58Z",
 "accountType": "",
 "iban": "",
 "valid": "",
 "parentTransferId": ""
}
Copied!

List all Checks Deposited
Retrieves list of all checks deposited in to a bank account. You can use the accountId parameter to list the checks deposited.

ENDPOINT
GET v1/receive/check?accountId={{accountId}}
RESPONSE
{
 "total": 1,
 "data": [
   {
     "id": "tra-0257b05c-05fb-41f7-b287-bb3a6fa130f4",
     "accountId": "acc-0a5d1eff-9efd-4962-b340-edf553ff3ea0",
     "contactId": "con-75eebd09-ef37-4aef-87c0-0f9b9884452f",
     "name": "Brice",
     "accountNumber": "",
     "routingNumber": "",
     "address": {
       "addressType": "",
       "line1": "",
       "line2": "",
       "city": "",
       "state": "",
       "country": "",
       "postalCode": ""
     },
     "amount": "158.00",
     "status": "pending",
     "description": "Payment for food",
     "txnType": "credit",
     "transferType": "physicalCheck",
     "transferSubType": "originated",
     "createdAt": "2021-07-03T07:21:58Z",
     "modifiedAt": "2021-07-03T07:40:05Z",
     "transferredAt": "2021-07-03T07:21:58Z",
     "accountType": "",
     "iban": "",
     "valid": "",
     "parentTransferId": ""
   }
 ]
}
Copied!

Cards

Card is used to spend from funds available in the bank account. You can create physical or virtual cards that are associated with the bank account and issued to the card holder.

The Card object

Field Type Optional Description
id string unique id of the card created
accountId string unique id of the bank account to which the card belongs
businessId string unique id of the business, if the bank account belongs to a business
programId string program id of the bank account
cardholder object see The Cardholder sub-object
cardType enum card type with possible values:
- virtual
- physical
label string label of the card.
limitInterval enum yes limit interval with possible values:
- daily
- weekly
- monthly
- yearly
- allTime
- perTransaction
limitAmount string yes spend limit amount of the card
shipping object yes required only for a physical card, see The Shipping sub-object
currency string currency of funds in the card.
expiryMonth string expiration month of the card
expiryYear string expiration year of the card
last4 string last 4 digits of the card number
cardStatus enum card status with possible values:
- active
- inactive
- canceled
- pendingActivation
createdPersonId string person id of the person that created the card
bin enum card bin with possible values:
- debit
- credit
allowedCategories array an array of mcc code to allow for the card. Example
["0742","0763"]
see complete list here
activatedAt string time at which the card was activated
createdAt string time at which the card was created
modifiedAt string time at which the card was modified

The Cardholder sub-object

Field Type Optional Description
id string unique id of the cardholder created
personId string person id of the cardholder
billingAddress object when type of address is billing, see The Address sub-object
createdAt string time at which the cardholder was created
modifiedAt string time at which the cardholder was modified

The Shipping sub-object

Field Type Optional Description
id string unique id of shipping object created.
shippingAddress string when type of address is shipping, see The Address sub-object
eta string estimated time of arrival for the shipped card
deliveryStatus enum card's delivery status with possible values:
- pending
- shipped
- delivered
- returned
- failure
- canceled
createdAt string time at which the shipping object was created
modifiedAt string time at which the shipping object was modified.

Create a Card
Creates a card by passing the required card information.

ENDPOINT
POST /v1/card
REQUEST
{
 "accountId": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
 "label": "Daily Card",
 "cardType": "physical",
 "limitInterval": "daily",
 "limitAmount": "34",
 "currency": "USD",
 "shipping": {
   "shippingAddress": {
     "addressType": "shipping",
     "line1": "123  Main  St",
     "line2": "",
     "city": "New York",
     "state": "NY",
     "country": "US",
     "postalCode": "10001"
   }
 },
 "billingAddress": {
   "addressType": "billing",
   "line1": "123  Main  St",
   "line2": "",
   "city": "New York",
   "state": "NY",
   "country": "US",
   "postalCode": "10001"
 }
}
Copied!
RESPONSE
{
 "id": "crd-f94d688d-dafa-431e-89a1-769d95e81354",
 "accountId": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
 "cardholder": {
   "id": "chd-826c7879-d669-4029-9284-2ba15afc73dd",
   "personId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
   "billingAddress": {
     "addressType": "mailing",
     "line1": "123  Main  St",
     "line2": "",
     "city": "New York",
     "state": "NY",
     "country": "US",
     "postalCode": "10001"
   },
   "createdAt": "2021-03-23T05:18:58Z",
   "modifiedAt": "2021-03-23T05:46:08Z"
 },
 "cardType": "physical",
 "label": "Daily Card",
 "limitInterval": "daily",
 "limitAmount": "34",
 "shipping": {
   "id": "shp-78566e7d-98e0-4094-acaf-8306e761598b",
   "shippingAddress": {
     "addressType": "mailing",
     "line1": "123  Main  St",
     "line2": "",
     "city": "New York",
     "state": "NY",
     "country": "US",
     "postalCode": "10001"
   },
   "eta": "2021-03-31T06:59:59Z",
   "deliveryStatus": "pending",
   "createdAt": "2021-03-23T05:46:08Z",
   "modifiedAt": "2021-03-23T05:46:08Z"
 },
 "currency": "USD",
 "expiryMonth": "02",
 "expiryYear": "2024",
 "last4": "1425",
 "cardStatus": "pendingActivation",
 "activatedAt": "0001-01-01T00:00:00Z",
 "createdAt": "2021-03-23T05:46:08Z",
 "modifiedAt": "2021-03-23T05:46:08Z",
 "createdPersonId": "per-43baf258-6214-4891-a787-04af2b9db999"
}
Copied!

Activate a Card
By default, a physical card is created as inactive. Use the Activate a Card endpoint to set its status to active. A virtual card is active on creation, hence it does not need to be activated.

ENDPOINT
PATCH /card/:id/activate
REQUEST
{
 "expiryMonth": 2,
 "expiryYear": 2024,
 "last4": "1234"
}
Copied!
RESPONSE
{
 "id": "crd-50f74312-e23c-45b1-8ab8-c70671b1f81b",
 "status": "active"
}
Copied!

Update a Card
Updates the card by passing the card id. You can only update the:
- label
- limitInterval
- limitAmount
- cardStatus (you can only change `cardStatus` to `inactive` and `active`)

ENDPOINT
PATCH /v1/card/:id
REQUEST
{
 "label": "day2day",
 "limitAmount": "34.00",
 "limitInterval": "daily",
 "cardStatus": "active"
}
Copied!
RESPONSE
{
 "id": "crd-f94d688d-dafa-431e-89a1-769d95e81354",
 "accountId": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
 "cardholder": {
   "id": "chd-826c7879-d669-4029-9284-2ba15afc73dd",
   "personId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
   "billingAddress": {
     "addressType": "mailing",
     "line1": "123  Main  St",
     "line2": "",
     "city": "New York",
     "state": "NY",
     "country": "US",
     "postalCode": "10001"
   },
   "createdAt": "2021-03-23T05:18:58Z",
   "modifiedAt": "2021-03-23T05:46:08Z"
 },
 "cardType": "physical",
 "label": "day2day",
 "limitInterval": "daily",
 "limitAmount": "34",
 "shipping": {
   "id": "shp-78566e7d-98e0-4094-acaf-8306e761598b",
   "shippingAddress": {
     "addressType": "mailing",
     "line1": "123  Main  St",
     "line2": "",
     "city": "New York",
     "state": "NY",
     "country": "US",
     "postalCode": "10001"
   },
   "eta": "2021-03-31T06:59:59Z",
   "deliveryStatus": "active",
   "createdAt": "2021-03-23T05:46:08Z",
   "modifiedAt": "2021-03-23T05:46:08Z"
 },
 "currency": "USD",
 "expiryMonth": "02",
 "expiryYear": "2024",
 "last4": "1425",
 "cardStatus": "active",
 "activatedAt": "0001-01-01T00:00:00Z",
 "createdAt": "2021-03-23T05:46:08Z",
 "modifiedAt": "2021-03-23T05:46:08Z",
 "createdPersonId": "per-43baf258-6214-4891-a787-04af2b9db999"
}
Copied!

Retrieve a Card (redacted)
Retrieves the redacted card information by passing the card id. With this endpoint, you can only view the last 4 digits of the card number along with the expiration date.

ENDPOINT
GET /v1/card/:id
RESPONSE
{
 "id": "crd-f94d688d-dafa-431e-89a1-769d95e81354",
 "accountId": "acc-d9ab5c90-408b-4755-837c-309bba0a0297",
 "businessId": "bus-4c6731c2-b7a5-4f9a-a298-bf46cf044000",
 "programId": "prg-01eda6ad-d361-4340-bdf5-8815f29741fe",
 "cardholder": {
   "id": "chd-826c7879-d669-4029-9284-2ba15afc73dd",
   "personId": "per-ce1a5805-21ca-4ffd-888c-f244dd7be6e5",
   "billingAddress": {
     "addressType": "mailing",
     "line1": "123  Main  St",
     "line2": "",
     "city": "New York",
     "state": "NY",
     "country": "US",
     "postalCode": "10001"
   },
   "createdAt": "2021-03-23T05:18:58Z",
   "modifiedAt": "2021-03-23T05:46:08Z"
 },
 "cardType": "physical",
 "label": "day2day",
 "limitInterval": "daily",
 "limitAmount": "34",
 "shipping": {
   "id": "shp-78566e7d-98e0-4094-acaf-8306e761598b",
   "shippingAddress": {
     "addressType": "mailing",
     "line1": "123  Main  St",
     "line2": "",
     "city": "New York",
     "state": "NY",
     "country": "US",
     "postalCode": "10001"
   },
   "eta": "2021-03-31T06:59:59Z",
   "deliveryStatus": "delivered",
   "createdAt": "2021-03-23T05:46:08Z",
   "modifiedAt": "2021-03-23T05:46:18Z"
 },
 "currency": "USD",
 "expiryMonth": "02",
 "expiryYear": "2024",
 "last4": "1425",
 "cardStatus": "active",
 "activatedAt": "0001-01-01T00:00:00Z",
 "createdAt": "2021-03-23T05:46:08Z",
 "modifiedAt": "2021-03-23T05:46:17Z",
 "createdPersonId": "per-43baf258-6214-4891-a787-04af2b9db999"
}
Copied!

Retrieve a Card (unredacted)
Retrieves the unredacted card information by passing the card id. With this endpoint, you can view the entire 16 digits of the card number along with the expiration date and cvv. This works only for virtual cards.

ENDPOINT
GET /v1/card/:id/unredact
RESPONSE
{
 "id": "crd-5be0f53f-2302-4ad5-b167-218e3df4d896",
 "cardNumber": "4000009990004478",
 "cvv": "123",
 "expiryMonth": "02",
 "expiryYear": "2024"
}
Copied!

Delete a Card
Delete a card by removing it from the account. 200 OK success status response code indicates that card was deactivated and removed from the associated bank account.

ENDPOINT
DELETE /v1/card/:id
RESPONSE
{
 "id": "crd-f94d688d-dafa-431e-89a1-769d95e81354",
 "cardStatus": "canceled"
}
Copied!

Test a Card
Test a card by passing a test amount. 200 OK success status response code indicates that the test transaction was posted. You must:
- use the simulation only to test virtual cards.
- use it only in TEST mode.
- pass the full amount (with dollar.cents) as a string. Ex: "10.00" or "4.90".

You can List all Card transactions made on the card, by filtering by the cardId parameter in the List all Transactions endpoint. You can also view the transaction by calling the Retrieve a Transaction endpoint or in the Solid Dashboard (in TEST mode). Go to Card section – you will see the card, along with transaction details.

ENDPOINT
POST /v1/card/:id/test
REQUEST
{
 "amount": "14.90"
}
Copied!

Transactions

Transaction is the record of money moved in to the bank account (credit) and money moved in out of the bank account (debit). A bank account can have several credit and debit transactions.

The Transaction object

Field Type Optional Description
id string unique id of the transaction
accountId string bank account id of the transaction.
businessId string business id that the bank account belongs to.
programId string program id that the bank account belongs to.
personId string person id that the bank account belongs to.
txnType string transaction type of the transaction (credit, debit)
title string title of the transaction
amount string amount of the transaction
transferType enum transfer type with possible values:
- intrabank
- ach
- card
- domesticWire
- physicalCheck
transferSubType enum transfer sub type with possible values:
- originated
- received
- auth
- authUpdate
- reversal
- refund
- interest
- fees
- penalty
- promotionalCredit
- accountCreationCredit
description string Yes description of the transaction.
balance string balance in the bank account after the transaction.
intrabank object Yes see The Transfer Info sub-object.
ach object Yes see The Transfer Info sub-object.
card object Yes see The Card Transaction Info sub-object
createdAt string time at which the transaction was created
txnDate string time at which the transaction took place

The Transfer Info sub-object

Field Type Optional Description
transferId string unique id of the transfer info object created.
contactId string contact id of individual or business for the transfer.
contactName string contact name of individual or business for the transfer.

The Card Transaction Info sub-object

Field Type Optional Description
id string unique id of card transaction info sub object created.
transferId string unique id of transfer object created.
label string label of the card used.
merchant object merchant the card was used at.
"merchant": {
  "merchantName": "PRINT SHOP",
  "merchantCity": "SAN MATEO",
  "merchantState": "CA",
  "merchantCountry": "US",
  "postalCode": "94403",
  "merchantCategory": ""
}

Retrieve a Transaction
Retrieves the transaction information by passing the account id and transaction id.

ENDPOINT
GET /v1/account/:id/transaction/:id
RESPONSE
{
 "id": "txn-81e056dc-3a12-4997-9116-ee76c6ca76fe",
 "title": "Snacks",
 "amount": "-341.00",
 "txnType": "debit",
 "transferType": "intrabank",
 "subType": "paymentToContact",
 "description": "Paid for Dinner for Mar 2020",
 "accountId": "acc-89175042-360c-4991-b2b5-afef492ae2ab",
 "businessId": "bus-ea8e41dd-7ce2-4d70-a223-cf453716264a",
 "programId": "prg-4865f43a-0400-47e4-ab5b-8a06283944a3",
 "personId": "per-b5d9d71e-0e49-437b-8e25-67d89bce19c5",
 "balance": "659.00",
 "intrabank": null,
 "ach": {
   "transferId": "tra-bbc68256-b5d7-4780-aa41-7ab2252c8f2d",
   "contactId": "con-ae743a6d-98db-4283-8279-8d68f775e8fd",
   "contactName": "Sanjay Pandey"
 },
 "card": null,
 "createdAt": "2021-03-15T16:49:38Z",
 "txnDate": "2021-03-15T16:49:38Z"
}
Copied!

List all Transactions
Retrieves list of all transactions that belong to a bank account. You can use the account id parameter to list the transactions.

ENDPOINT
GET /v1/account/:id/transaction/
RESPONSE
{
 "total": 2,
 "data": [
   {
     "id": "txn-81e056dc-3a12-4997-9116-ee76c6ca76fe",
     "title": "Snacks",
     "amount": "-341.00",
     "txnType": "debit",
     "transferType": "intrabank",
     "subType": "paymentToContact",
     "description": "Paid for Snacks for Mar 2020",
     "accountId": "acc-89175042-360c-4991-b2b5-afef492ae2ab",
     "businessId": "bus-ea8e41dd-7ce2-4d70-a223-cf453716264a",
     "programId": "prg-4865f43a-0400-47e4-ab5b-8a06283944a3",
     "personId": "per-b5d9d71e-0e49-437b-8e25-67d89bce19c5",
     "balance": "659.00",
     "intrabank": {
       "transferId": "tra-bbc68256-b5d7-4780-aa41-7ab2252c8f2d",
       "contactId": "con-ae743a6d-98db-4283-8279-8d68f775e8fd",
       "contactName": "Sanjay Pandey"
     },
     "ach": null,
     "card": null,
     "createdAt": "2021-03-15T16:49:38Z",
     "txnDate": "2021-03-15T16:49:38Z"
   },
   {
     "id": "txn-db4bcad1-99cf-47c4-be38-5ceddfab84b9",
     "txnType": "debit",
     "title": "Print",
     "amount": "-2.19",
     "transferType": "card",
     "subType": "cardAuth",
     "description": "Print Shop",
     "accountId": "acc-89175042-360c-4991-b2b5-afef492ae2ab",
     "businessId": "bus-ea8e41dd-7ce2-4d70-a223-cf453716264a",
     "programId": "prg-4865f43a-0400-47e4-ab5b-8a06283944a3",
     "personId": "per-00000000-0000-0000-0000-000000000000",
     "balance": "199.54",
     "intrabank": null,
     "ach": null,
     "card": {
       "id": "crd-7afb09be-1853-4e24-abed-dfb3ae1511d0",
       "transferId": "tra-04990d7b-8a12-474c-8a6c-526170b256f5",
       "cardLabel": "day2day",
       "merchant": {
         "merchantName": "PRINT SHOP",
         "merchantCity": "SAN MATEO",
         "merchantState": "CA",
         "merchantCountry": "US",
         "postalCode": "94403",
         "merchantCategory": ""
       }
     },
     "createdAt": "2021-03-04T22:16:03Z",
     "txnDate": "2021-03-04T22:16:03Z"
   }
 ]
}
Copied!

List all Transactions using filters
Retrieves list of all transactions that belong to a bank account. You can use the account id parameter to list the transactions and query parameters to filter the transactions. Filters available are:
- startDate
- endDate
- minAmount
- maxAmount
- cardId
- contactId
- txnType
- transferType
- subType

Pagination support using limit & offset.

ENDPOINT
GET /v1/account/:id/transaction?startDate={{startDate}}&endDate={{endDate}}&minAmount={{minAmount}}&maxAmount={{maxAmount}}&offset={{offset}}&limit={{limit}}
RESPONSE
{
 "total": 2,
 "data": [
   {
     "id": "txn-81e056dc-3a12-4997-9116-ee76c6ca76fe",
     "title": "Snacks",
     "amount": "-341.00",
     "txnType": "debit",
     "transferType": "intrabank",
     "subType": "paymentToContact",
     "description": "Paid for Snacks for Mar 2020",
     "accountId": "acc-89175042-360c-4991-b2b5-afef492ae2ab",
     "businessId": "bus-ea8e41dd-7ce2-4d70-a223-cf453716264a",
     "programId": "prg-4865f43a-0400-47e4-ab5b-8a06283944a3",
     "personId": "per-b5d9d71e-0e49-437b-8e25-67d89bce19c5",
     "balance": "659.00",
     "intrabank": {
       "transferId": "tra-bbc68256-b5d7-4780-aa41-7ab2252c8f2d",
       "contactId": "con-ae743a6d-98db-4283-8279-8d68f775e8fd",
       "contactName": "Sanjay Pandey"
     },
     "ach": null,
     "card": null,
     "createdAt": "2021-03-15T16:49:38Z",
     "txnDate": "2021-03-15T16:49:38Z"
   },
   {
     "id": "txn-db4bcad1-99cf-47c4-be38-5ceddfab84b9",
     "txnType": "debit",
     "title": "Print",
     "amount": "-2.19",
     "transferType": "card",
     "subType": "cardAuth",
     "description": "Print Shop",
     "accountId": "acc-89175042-360c-4991-b2b5-afef492ae2ab",
     "businessId": "bus-ea8e41dd-7ce2-4d70-a223-cf453716264a",
     "programId": "prg-4865f43a-0400-47e4-ab5b-8a06283944a3",
     "personId": "per-00000000-0000-0000-0000-000000000000",
     "balance": "199.54",
     "intrabank": null,
     "ach": null,
     "card": {
       "id": "crd-7afb09be-1853-4e24-abed-dfb3ae1511d0",
       "transferId": "tra-04990d7b-8a12-474c-8a6c-526170b256f5",
       "cardLabel": "day2day",
       "merchant": {
         "merchantName": "PRINT SHOP",
         "merchantCity": "SAN MATEO",
         "merchantState": "CA",
         "merchantCountry": "US",
         "postalCode": "94403",
         "merchantCategory": ""
       }
     },
     "createdAt": "2021-03-04T22:16:03Z",
     "txnDate": "2021-03-04T22:16:03Z"
   }
 ]
}
Copied!

Webhooks

Webhooks notify you about events related to the bank account. You can configure webhook endpoints via the API and listen for events. That way, you don't need to poll the API for updates.

The Webhook object

Field Type Optional Description
id string unique id of the webhook
url string the URL of the webhook endpoint
events array an array of events with the possible values:
person.kyc.approved
person.kyc.declined
business.kyb.approved
business.kyb.declined
account.debit
account.credit
description string Yes description of the webhook
status enum webhook status with possible values:
- active
- paused
- deactivated
- deleted

Get all Webhook events
Retrieves list of all webhooks events that belong to a person, business, bank account or card. You can use the accountId parameter to list the contacts. You can subscribe to the events when you create a webhook.

ENDPOINT
GET /v1/webhook/events
RESPONSE
{
 "total": 25,
 "data": [
   "person.kyc.approved",
   "person.kyc.declined",
   "person.kyc.review",
   "business.kyb.approved",
   "business.kyb.declined",
   "business.kyb.review",
   "intrabank.originated.debit",
   "intrabank.originated.credit",
   "intrabank.received.credit",
   "intrabank.received.debit",
   "card.refund",
   "card.reversal",
   "card.spend",
   "card.spend.update",
   "card.freeze",
   "card.declined",
   "ach.received.credit",
   "ach.received.debit",
   "ach.originated.credit",
   "ach.originated.debit",
   "ach.reversal.credit",
   "ach.reversal.debit",
   "wire.received.credit",
   "wire.received.declined",
   "wire.originated.debit",
   "wire.originated.declined"
 ]
}
Copied!

Create a Webhook
Create a webhook endpoint with a url and a list of events.

ENDPOINT
POST /v1/webhook
REQUEST
{
 "url": "https://acme.com/webhook/solid",
 "events": [
   "person.kyc.approved",
   "person.kyc.declined",
   "person.kyc.review",
   "business.kyb.approved",
   "business.kyb.declined",
   "business.kyb.review",
   "intrabank.originated.debit",
   "intrabank.originated.credit",
   "intrabank.received.credit",
   "intrabank.received.debit",
   "card.refund",
   "card.reversal",
   "card.spend",
   "card.spend.update",
   "card.freeze",
   "card.declined",
   "ach.received.credit",
   "ach.received.debit",
   "ach.originated.credit",
   "ach.originated.debit",
   "ach.reversal.credit",
   "ach.reversal.debit",
   "wire.received.credit",
   "wire.received.declined",
   "wire.originated.debit",
   "wire.originated.declined"
 ],
 "description": "Listen to Solid's events for Acme",
 "status": "enabled"
}
Copied!
RESPONSE
Copied!

Update a Webhook
Updates the webhook information by passing the webhook id. You can only update the:
- url
- events
- description
- status

ENDPOINT
PATCH /v1/webhook/:id
REQUEST
{
 "url": "https://acme.com/webhook/solidbanking",
 "events": [
   "person.kyc.approved",
   "business.kyb.declined",
   "person.kyc.declined",
   "business.kyb.approved",
 ],
 "description": "Listen to Solid Banking's events for Acme",
 "status": "enabled"
}
Copied!
RESPONSE
{
 "id": "web-6f4b9411-01d0-4ff4-b8fb-270b856c12c8",
 "url": "https://acme.com/webhook/solidbanking",
 "events": [
   "person.kyc.approved",
   "person.kyc.declined",
   "business.kyb.approved",
   "business.kyb.declined",
 ],
 "description": "Listen to Solid Banking's events for Acme",
 "status": "enabled"
}
Copied!

Retrieve a Webhook
Retrieves the webhook information by passing the webhook id.

ENDPOINT
GET /v1/webhook/:id
RESPONSE
{
 "id": "web-6f4b9411-01d0-4ff4-b8fb-270b856c12c8",
 "url": "https://acme.com/webhook/solidbanking",
 "events": [
   "person.kyc.approved",
   "person.kyc.declined",
   "business.kyb.approved",
   "business.kyb.declined",
 ],
 "description": "Listen to Solid Banking's events for Acme",
 "status": "enabled"
}
Copied!

List all Webhooks
Retrieves list of all webhooks that belong to a bank account. You can use the accountId parameter to list the contacts.

ENDPOINT
GET v1/webhook
RESPONSE
{
 "total": 1,
 "data": [
   {
     "url": "https://acme.com/webhook/solidbanking",
     "events": [
       "person.kyc.approved",
       "person.kyc.declined",
       "person.kyc.review",
       "business.kyb.approved",
       "business.kyb.declined",
       "business.kyb.review",
       "intrabank.originated.debit",
       "intrabank.originated.credit",
       "intrabank.received.credit",
       "intrabank.received.debit",
       "card.refund",
       "card.reversal",
       "card.spend",
       "card.spend.update",
       "card.freeze",
       "card.declined",
       "ach.received.credit",
       "ach.received.debit",
       "ach.originated.credit",
       "ach.originated.debit",
       "ach.reversal.credit",
       "wire.received.credit",
       "wire.received.declined",
       "wire.originated.debit",
       "wire.originated.declined"
     ],
     "description": "Listen to Solid Banking's events for Acme",
     "status": "enabled"
   }
 ]
}
Copied!

Delete a Webhook
Delete a webhook by passing the webhook id.

ENDPOINT
DELETE /v1/webhook/:id
RESPONSE
{
 "id": "web-6f4b9411-01d0-4ff4-b8fb-270b856c12c8",
 "status": "deleted"
}
Copied!