Building Consumer Secured Charge Cards
A step-by-step guide to creating consumer charge cards
Overview
Secured charge cards are a composite construct that pairs a charge card with a security deposit account. The balance of the security deposit account sets the credit limit of the charge card, and repayments on the charge card can be made from either the security deposit account or other bank accounts. Bond's APIs support the issuance of secured charge cards and associated fund flows.
This guide will cover the following elements of the secured charge card experience.
To dive deeper into onboarding for secured charge guides, check out this guide.
Prerequisites
Before issuing a secured charge card, the following prerequisites are recommended:
Create API keys
In order to interact with the API endpoints on Bond's platform, a pair of Identity
and Authorization
API keys need to be supplied in the request headers. More information on creating API keys can be found on the following page: Getting your API key.
Find your program ID
A program ID is a UUID value that represents a relationship between you and a bank, and is often associated one-to-one with a financial product. In this guide, our program ID will be affiliated with consumer secured credit accounts. You can find your program ID in Bond Portal under the Developers
tab. For more information on what a program ID represents, please see Card program ID.
Register a webhook
Bond uses webhooks to signal asynchronously that work has been done in response to certain API requests. These webhooks are for convenience, and any information provided asynchronously in the webhooks can also be queried using synchronous API requests. For our purposes, we are interested in webhooks in the following categories:
credit
kyc
Webhook registration can be done through Bond Portal or via API. More information about available webhook events can be found in the documentation.
Issuing a secured charge card
In order to issue secured charge cards, the following steps are required:
- Create a customer
- Create a credit application
- Submit credit application
- Fund the security deposit account
- Issue a secured charge card
In order to issue a secured charge card with a non-zero credit limit, the security deposit account needs to be funded. This may optionally be done after issuing a secured charge card.
Create a customer
On Bond's platform, every one of your consumer users that is issued a financial product must have an associated Customer object. This customer object stores important information on the consumer, including name, address, and other sensitive information that is required for regulatory purposes.
For the purposes of this guide, we will be onboarding an imaginary consumer named Eline Amista who lives at Bond HQ. An example of the customer creation request for Eline is provided below. For more information on the request and response schemas of the customer creation API, please refer to the Create a customer API reference.
curl --request POST \
--url https://sandbox.bond.tech/api/v0.1/customers/ \
--header 'Identity: YOUR-IDENTITY' \
--header 'Authorization: YOUR-AUTHORIZATION' \
--header 'Content-Type: application/json' \
--data '{
"brand_person_id": "YOUR-INTERNAL-USER-ID",
"first_name":"Eline",
"last_name":"Amista",
"dob":"2000-05-04",
"email": "[email protected]",
"ssn": "123123123",
"addresses":[
{
"address_type":"PHYSICAL",
"street":"345 California Ave.",
"street2": "Suite 600",
"city": "San Francisco",
"state": "CA",
"zip_code": "12345-1234",
"country": "US",
"is_primary": true
}
]
}'
Note that the brand_person_id
field is provided in case you want to include a unique UUID to help associate between Bond's customer
ID and your own internal user
ID. For our purposes, we will pass a random UUID 188f1914-9eb7-46bd-9977-547278838394
.
After sending the customer creation request, we receive a successful response.
{
"customer_id": "3a43b612-825c-48d4-b025-47083ab10755",
"bond_brand_id": "abaa2147-4533-4ec7-a9f6-bd88a988ecd1",
"brand_person_id": "188f1914-9eb7-46bd-9977-547278838394",
"date_created": "2022-05-23T21:12:17.352740+00:00",
"dob": "2000-05-04",
"first_name": "Eline",
"middle_name": "",
"last_name": "Amista",
"kyc_requests_available": 3,
"addresses": [
{
"address_id": "9de0c172-dc43-4c80-9d2c-dc0e4687cdb5",
"address_type": "PHYSICAL",
"street": "345 California Ave.",
"street2": "Suite 600",
"city": "San Francisco",
"state": "CA",
"zip_code": "12345-1234",
"country": "US",
"is_primary": true,
"date_created": "2022-05-23T21:12:17.355931+00:00"
}
],
"business_id": null,
"email": "[email protected]",
"ssn": "XXX-XX-3123"
}
In the response, we want to pay particular attention to the customer_id
UUID value 3a43b612-825c-48d4-b025-47083ab10755
which uniquely identifies the newly created customer object associated with Eline, and the address_id
UUID value 9de0c172-dc43-4c80-9d2c-dc0e4687cdb5
which uniquely identifies Eline's address.
Create a credit application
In order to determine whether your user is eligible for a charge card, you will need to create and submit a credit application containing personal details of your user on their behalf. An example of a credit application creation request is provided below. For more information on the request and response schemas of the credit application creation API, please refer to the Create credit application API reference.
curl --request POST \
--url https://api.bond.tech/api/v0.1/credit/applications \
--header 'Accept: application/json' \
--header 'Authorization: YOUR-AUTHORIZATION' \
--header 'Content-Type: application/json' \
--header 'Identity: YOUR-IDENTITY' \
--data '
{
"applicant": {
"customer_id": "3a43b612-825c-48d4-b025-47083ab10755",
"total_annual_income": 8000000,
"monthly_housing_payment": 200000,
"employment_status": "employed"
},
"program_id": "YOUR-PROGRAM-ID"
}
'
Note that we are using the customer_id
value 3a43b612-825c-48d4-b025-47083ab10755
that we received in the customer creation response payload. A successful response to the credit application creation request looks like:
{
"program_id": "54f7882b-6b95-4cde-a7eb-775b9468bcb1",
"date_created": "2022-05-15T00:17:56.842105Z",
"date_updated": "2022-05-15T00:17:56.842105Z",
"application_id": "9b3dbb5c-97c1-4c18-97bc-e376e62cc2c9",
"application_status": "created",
"applicant": {
"customer_id": "05a8054f-8259-4e30-8d1d-d286081987bd",
"employment_status": null,
"address_id": "bb5fa77d-fd66-4e31-81c0-eaf549b0c797",
"total_annual_income": 8000000,
"monthly_housing_payment": 200000,
"terms_accepted": true,
"currency": "USD",
"first_name": null,
"middle_name": null,
"last_name": null,
"date_of_birth": null,
"street": null,
"street2": null,
"city": null,
"state": null,
"country": null,
"zip_code": null,
"ssn": null,
"email": null
},
"accounts": {
"security_deposit_account_id": null
}
}
We take special note of the application_id
value 9b3dbb5c-97c1-4c18-97bc-e376e62cc2c9
which uniquely identifies the application associated with Eline.
Submit credit application
Submission
When the application is ready to be submitted, you can use the Submit credit application API. An example of a credit application submission request is provided below.
curl --request POST \
--url https://api.bond.tech/api/v0.1/credit/applications/9b3dbb5c-97c1-4c18-97bc-e376e62cc2c9/submit \
--header 'Accept: application/json' \
--header 'Authorization: YOUR-AUTHORIZATION' \
--header 'Identity: YOUR-IDENTITY'
Note that we used our application id 9b3dbb5c-97c1-4c18-97bc-e376e62cc2c9
as a path variable. An example of a successful submission response looks like:
{
"program_id": "54f7882b-6b95-4cde-a7eb-775b9468bcb1",
"date_created": "2022-05-15T00:17:56.842105Z",
"date_updated": "2022-05-15T00:17:56.842105Z",
"application_id": "9b3dbb5c-97c1-4c18-97bc-e376e62cc2c9",
"application_status": "kyc_submitted",
"applicant": {
"customer_id": "05a8054f-8259-4e30-8d1d-d286081987bd",
"employment_status": null,
"address_id": "bb5fa77d-fd66-4e31-81c0-eaf549b0c797",
"total_annual_income": 8000000,
"monthly_housing_payment": 200000,
"terms_accepted": true,
"currency": "USD",
"first_name": null,
"middle_name": null,
"last_name": null,
"date_of_birth": null,
"street": null,
"street2": null,
"city": null,
"state": null,
"country": null,
"zip_code": null,
"ssn": null,
"email": null
},
"accounts": {
"security_deposit_account_id": null
}
}
KYC
As shown in the previous response, the application_status
value of kyc_started
indicates that the Bond platform has automatically initiated regulatory KYC checks on the customer object associated with Eline. These KYC checks are equivalent to the KYC checks initiated by the Start KYC (Know-Your-Customer) endpoint, and should be handled in the same way. In the majority of cases, these checks run automatically and are completed in seconds. However, in certain scenarios, additional information may be required in order to complete identity verification. For more information on the KYC process, please refer to Running KYC in the documentation.
There are a few cases that arise in KYC that may require additional intervention. These cases are described in the table below.
KYC Webhook | Notes |
---|---|
kyc.verification.document_required | The documents required for the document required state are accessible via webhook or via the Retrieve KYC Status endpoint using the relevant customer ID and program ID. |
kyc.verification.reenter_information | Note that responding to this webhook is optional. In order to respond to the reenter_information webhook, information provided via the customer object can be patched directly via the Update a customer endpoint, while information provided via the credit application can be changed directly via the Patch credit application endpoint. After changing the relevant fields described by the kyc.verification.reenter_information webhook, the credit application can be resubmitted again using the Submit credit application endpoint. |
kyc.verification.failure | When the background KYC checks result in a failure, the application_status value will be kyc_warning . However, an application can be resubmitted after a failed KYC up to a limit of 3 times using the Submit credit application endpoint. |
Approval
Pending a successful KYC, the credit application will move into an approved
state. This will be accompanied by a credit.application.approved
webhook. The approved
state can also be viewed using the Get credit application endpoint. An example of a GET response for an approved application follows below.
{
"program_id": "54f7882b-6b95-4cde-a7eb-775b9468bcb1",
"date_created": "2022-05-15T00:17:56.842105Z",
"date_updated": "2022-05-15T00:17:56.842105Z",
"application_id": "9b3dbb5c-97c1-4c18-97bc-e376e62cc2c9",
"application_status": "approved",
"applicant": {
"customer_id": "05a8054f-8259-4e30-8d1d-d286081987bd",
"employment_status": null,
"address_id": "bb5fa77d-fd66-4e31-81c0-eaf549b0c797",
"total_annual_income": 8000000,
"monthly_housing_payment": 200000,
"terms_accepted": true,
"currency": "USD",
"first_name": null,
"middle_name": null,
"last_name": null,
"date_of_birth": null,
"street": null,
"street2": null,
"city": null,
"state": null,
"country": null,
"zip_code": null,
"ssn": null,
"email": null
},
"accounts": {
"security_deposit_account_id": "173121d8-f05e-4bb6-b280-b5b761d2214f"
}
}
We take special note of the security_deposit_account_id
field 173121d8-f05e-4bb6-b280-b5b761d2214f
under the accounts
key. This value uniquely identifies the security deposit account that has been created for Eline.
Adverse action notices
Not all credit applications are approved. When a credit application is rejected, an adverse action notice is generated. These notices need to be supplied to the end consumer (Eline, for example), in an approved template commonly via email.
At this time, the Get adverse actions endpoint can be used to get additional information on the rejection reason. An example of such a request for Eline is provided below.
curl --request GET \
--url https://api.bond.tech/api/v0.1/credit/applications/9b3dbb5c-97c1-4c18-97bc-e376e62cc2c9/adverse-actions \
--header 'Accept: application/json' \
--header 'Authorization: YOUR-AUTHORIZATION' \
--header 'Identity: YOUR-IDENTITY'
For Eline, we expect that the application will encounter no difficulties, so we receive the following 404
response.
{
"status": "ERROR_CODE_CREDIT_APPLICATION_GENERIC",
"code": 3001,
"message": "Not found.",
"details": {}
}
An example response for a different application that contains an adverse action is given below.
{
"id": "585ffb6a-98f9-40f6-a2b9-81ab22fb169a",
"application_id": "9b3dbb5c-97c1-4c18-97bc-e376e62cc2c9",
"date_created": "2022-05-15T21:39:10.130756Z",
"date_updated": "2022-05-15T21:39:10.192226Z",
"service": "kyc",
"reasons": [
"Unable to verify identity"
]
}
The most common reason for adverse action notices is when the customer and the credit application fail 3 separate attempts at KYC. After an application has exhausted the number of times the underlying KYC checks can be run, an error will be thrown. An example of this error when trying to submit the application again via Submit credit application is shown below.
{
"status": "ERROR_CODE_CREDIT_APPLICATION_MAX_KYC_ATTEMPTS",
"code": 3010,
"message": "Customer has exceeded maximum number of KYC attempts.",
"details": {
"@type": "type.googleapis.com/bond.credit.v1.CreditCustomerErrorDetail",
"application_id": "9b3dbb5c-97c1-4c18-97bc-e376e62cc2c9",
"customer_id": "3a43b612-825c-48d4-b025-47083ab10755"
}
}
Fund the security deposit account
The credit limit of the charge card is equal to the balance of the security deposit account. Since the balance of the account starts at zero, your users will not be able to spend on their charge cards without funding the security deposit account. The security deposit account can be funded through a few different methods, including ACH and direct deposit.
ACH transfer
When funding a security deposit account through ACH, the first step is to link an external bank account. Linking an external account can be done either via Bond's SDK or via Bond's APIs directly. The easiest way to link an external account for testing purposes is with the v0 POST /accounts API.
Underwriting via external bank accounts
After linking the account, the Get External Account History endpoint can be used to view recent transactions on the external account. This information can also be used to make an underwriting assessment as to whether you would like to offer your user a card.
Funding a security deposit account through ACH can be done through the Create transfer endpoint. Note that in order to initiate an ACH transfer, an external account must be linked to the customer. After an external account has been linked, there should be a linked account UUID value that identifies the linked account. For our purposes, we will assume that the linked account has UUID value f64eadeb-5398-46f7-b1a1-9a0a709039a9
Sandbox limitation
In the Sandbox, all valid ACH transfers will get settled within 10 minutes of creation. There is currently no way to simulate an ACH that gets returned - for example, in the sandbox, it is assumed that the linked account exists and has sufficient funds.
An example of an ACH initialization request for Eline follows below.
curl --request POST \
--url https://api.bond.tech/api/v0.1/transfers \
--header 'Accept: application/json' \
--header 'Authorization: YOUR-AUTHORIZATION' \
--header 'Content-Type: application/json' \
--header 'Identity: YOUR-IDENTITY' \
--data '
{
"ach": {
"class_code": "WEB",
"same_day": false
},
"origination_account_id": "f64eadeb-5398-46f7-b1a1-9a0a709039a9",
"destination_account_id": "173121d8-f05e-4bb6-b280-b5b761d2214f",
"amount": 25000,
"description": "eline funding"
}
'
Note that we supplied the linked account ID as the origination_account_id
and the security deposit account ID as the destination_account_id
because we want the funds to flow from the linked account to the security deposit account.
An example of a successful response is reproduced below.
{
"date_created": "2022-05-16T17:14:09.686688",
"date_updated": "2022-05-16T17:14:09.686688",
"date_settled": null,
"transfer_id": "4ead6cdc-77eb-45fa-9959-3f166385a60a",
"transaction_id": "0fec1e58-b197-4052-99cf-2218496c5482",
"origination_account_id": "f64eadeb-5398-46f7-b1a1-9a0a709039a9",
"destination_account_id": "173121d8-f05e-4bb6-b280-b5b761d2214f",
"description": "eline funding",
"amount": "25000",
"ach": {
"ach_class_code": "WEB",
"same_day": false,
"ach_return_code": null,
"failure_reason": null
}
}
Note that ACH timelines typically include time both for transactions to be processed and to be considered settled with the funds made available. For more information on ACH transfers, please refer to our documentation.
Direct deposit
Information on the security deposit account can be retrieved using the Get account endpoint. An example of such a request for Eline follows below.
curl --request GET \
--url https://api.bond.tech/api/v0.1/accounts/173121d8-f05e-4bb6-b280-b5b761d2214f \
--header 'Accept: application/json' \
--header 'Authorization: YOUR-AUTHORIZATION' \
--header 'Identity: YOUR-IDENTITY'
A successful response for a security deposit account looks like the following:
{
"account_id": "173121d8-f05e-4bb6-b280-b5b761d2214f",
"date_updated": "2022-05-16T19:39:34Z",
"date_created": "2022-05-16T19:39:34Z",
"program_id": "YOUR-PROGRAM-ID",
"customer_id": "3a43b612-825c-48d4-b025-47083ab10755",
"type": "security_deposit",
"status": "active",
"description": "string",
"routing_number": 547897762,
"account_number": 574771265,
"balance": {
"current_balance": 0,
"ledger_balance": 0,
"currency": "USD"
},
"security_deposit": {
"credit_account": "e913d434-bda9-494e-b6df-adf46a52c1cc"
}
}
We can use the routing_number
value 547897762
and account_number
value 574771265
to receive ACH transfers originated from other financial institutions, such as from payroll through direct deposit.
Sandbox limitations
Note that in sandbox, the
routing_number
andaccount_number
values are not real and will not be accessible via direct deposit.
Note again that ACH timelines typically include time both for transactions to be processed and to be considered settled with the funds made available. For more information on ACH transfers, please refer to our documentation.
Issue a charge card
The status of the application can be actively monitored using the Get credit application API or passively received using the credit.application.approved
webhook event.
Once Eline's application_status
is approved
, we are ready to issue a secured charge card. Consumer secured charge cards can be issued through our Create a card API. An example of a charge card creation request is provided below.
curl --request POST \
--url https://api.bond.tech/api/v0.1/cards \
--header 'Accept: application/json' \
--header 'Authorization: YOUR-AUTHORIZATION' \
--header 'Content-Type: application/json' \
--header 'Identity: YOUR-IDENTITY' \
--data '
{
"program_id": "YOUR-PROGRAM",
"account_id": "173121d8-f05e-4bb6-b280-b5b761d2214f"
}
'
Note that we passed the security_deposit_account_id
value into the request account_id
field. This will allow us to link the charge card with the security deposit account.
An example of a successful card creation response is provided below.
{
"card_id": "057c6074-a02d-4a5a-bad9-bbc64b047df7",
"customer_id": "3a43b612-825c-48d4-b025-47083ab10755",
"account_id": "e913d434-bda9-494e-b6df-adf46a52c1cc",
"card_number": "tok_live_283734",
"cvv": "tok_live_p923u34",
"expiry_date": "0331",
"last_four": "6270",
"status": "active",
"card_design_id": null
}
At this point, we've successfully created a secured charge card for Eline! We want to note the card_id
value 057c6074-a02d-4a5a-bad9-bbc64b047df7
and the credit account_id
value e913d434-bda9-494e-b6df-adf46a52c1cc
for future use.
Making a repayment
In order to make a repayment, the following steps are required:
Generate a statement
Statements contain information such as transaction history, outstanding balance, and payment due date, and must be provided to your users during the repayment cycle. For more information on generating statements, please refer to Bond's Statements guide.
Initialize payment
When initializing a payment, the payment may be initialized either from the security deposit account or from an externally linked bank account. Both options must be presented to your user, though one may be encouraged based on your product flow.
Pay from security deposit account
In order to initialize a transfer from our security deposit account to our card, we can use the Create a transfer API. An example of a transfer initialization request is provided below. These repayments from the security deposit account will settle and post to the card instantly since they are virtual account transfers that do not involve moving money via ACH.
curl --request POST \
--url https://api.bond.tech/api/v0.1/transfers \
--header 'Accept: application/json' \
--header 'Authorization: YOUR-AUTHORIZATION' \
--header 'Content-Type: application/json' \
--header 'Identity: YOUR-IDENTITY' \
--data '{
"origination_account_id": "173121d8-f05e-4bb6-b280-b5b761d2214f",
"destination_account_id": "e913d434-bda9-494e-b6df-adf46a52c1cc",
"description": "eline repayment",
"amount": 25600
}'
Note that we use the security deposit account ID value 173121d8-f05e-4bb6-b280-b5b761d2214f
as our origination_account_id
and the credit account ID value e913d434-bda9-494e-b6df-adf46a52c1cc
as our destination_account_id
in order to indicate that the funds should move from the former to the latter.
An example of a successful response is provided below.
{
"date_created": "2022-05-19T17:14:09.686688",
"date_updated": "2022-05-19T17:14:09.686688",
"date_settled": "2022-05-19T17:14:09.686688",
"transfer_id": "4ead6cdc-77eb-45fa-9959-3f166385a60a",
"transaction_id": "0fec1e58-b197-4052-99cf-2218496c5482",
"origination_account_id": "173121d8-f05e-4bb6-b280-b5b761d2214f",
"destination_account_id": "e913d434-bda9-494e-b6df-adf46a52c1cc",
"description": "eline repayment",
"amount": "25600"
}
Pay from external account
In order to initialize a transfer from an external bank account, we can use the Create a transfer API in the same way that we funded the security deposit account. These repayments from external accounts will post to the card 1 calendar day after they have been made. The underlying ACH transfer will settle over the standard Bond ACH timeline. An example of a transfer initialization request is provided below.
curl --request POST \
--url https://api.bond.tech/api/v0.1/transfers \
--header 'Accept: application/json' \
--header 'Authorization: YOUR-AUTHORIZATION' \
--header 'Content-Type: application/json' \
--header 'Identity: YOUR-IDENTITY' \
--data '
{
"ach": {
"class_code": "WEB",
"same_day": false
},
"origination_account_id": "f64eadeb-5398-46f7-b1a1-9a0a709039a9",
"destination_account_id": "e913d434-bda9-494e-b6df-adf46a52c1cc",
"description": "eline repayment",
"amount": 25600
}
'
Note again that we use the external account ID value f64eadeb-5398-46f7-b1a1-9a0a709039a9
as our origination_account_id
and the credit account ID value e913d434-bda9-494e-b6df-adf46a52c1cc
as our destination_account_id
in order to indicate that the funds should move from the former to the latter.
An example of a successful response is replicated below.
{
"date_created": "2022-05-19T17:14:09.686688",
"date_updated": "2022-05-19T17:14:09.686688",
"date_settled": null,
"transfer_id": "e19472da-86c7-404c-8737-b64d9d120ece",
"transaction_id": "cedc0221-9de6-4735-86d7-1ea89e0cc591",
"origination_account_id": "f64eadeb-5398-46f7-b1a1-9a0a709039a9",
"destination_account_id": "e913d434-bda9-494e-b6df-adf46a52c1cc",
"description": "eline repayment",
"amount": "25600",
"ach": {
"ach_class_code": "WEB",
"same_day": false,
"ach_return_code": null,
"failure_reason": null
}
}
Forced Repayments
If the user does not initialize a repayment by the statement due date, you should initiate a forced repayment to claw back funds from the SDA to pay off the credit card balance. You should do this within 2 days after the statement due date. If your contract with Bond includes credit reporting, this will prevent a missed payment from being reported to the credit bureaus.
To determine whether the user has already initiated a payment for the statement period, you can retrieve the transactions for the user's Credit Card Account from the time the statement's statement_end_date
, and check that there are pending
or completed
transfers for at least the new_balance
(equal to the minimum_payment_due
for secured cards) of the statement period.
Credit Reporting
If included in your contract with Bond, we will furnish credit data to the three major credit bureaus (Equifax, Experian, and TransUnion) for every customer statement issued on a Secured Charge Card. This happens following the payment period for a given statement.
For example, for a payment period from June 1 to June 31, the statement data would be generated by Bond on EOD (UTC) June 31, you'd be expected to deliver the statement to the end-user by EOD July 2, the due date for the statement would be July 23, you'd be expected to issue a forced repayment by July 25 (if a repayment wasn't made by the due date), and Bond would furnish data to the bureaus between July 26 and July 28.
Closing a secured charge card
In order to close a secured charge card, the following steps are required:
- Change card to inactive status
- Execute final repayment cycle
- Close credit account
- Refund security deposit account balance
- Close security deposit account
Change card to inactive status
In order to close Eline's card, we need to ensure that no further transactions occur on the card. This can be accomplished by changing the status of Eline's card to inactive
through our Update Card endpoint. An example of an update card request is provided below.
curl --request PATCH \
--url https://api.bond.tech/api/v0.1/cards/057c6074-a02d-4a5a-bad9-bbc64b047df7 \
--header 'Accept: application/json' \
--header 'Authorization: YOUR-AUTHORIZATION' \
--header 'Content-Type: application/json' \
--header 'Identity: YOUR-IDENTITY' \
--data '{"status": "inactive"}'
Note that we pass Eline's card_Id
value 057c6074-a02d-4a5a-bad9-bbc64b047df7
as a path variable in the request. An example of a successful response is replicated below.
{
"card_id": "057c6074-a02d-4a5a-bad9-bbc64b047df7",
"customer_id": "3a43b612-825c-48d4-b025-47083ab10755",
"account_id": "173121d8-f05e-4bb6-b280-b5b761d2214f",
"card_number": "tok_live_283734",
"cvv": "tok_live_p923u34",
"expiry_date": "0331",
"last_four": "6270",
"status": "inactive",
"card_design_id": null
}
Execute final repayment cycle
Now that the card has been made inactive, one final repayment cycle must be executed in order to bring the balance of the charge card to zero. This includes issuing a statement and making a cardholder payment, either through the security deposit account or through an externally linked bank account.
Close credit account
After the last repayment cycle has settled successfully, the charge card credit account is now ready to be closed. This can be accomplished through the Close an account endpoint. An example of a request to close Eline's credit account is provided below.
curl --request POST \
--url https://api.bond.tech/api/v0.1/accounts/e913d434-bda9-494e-b6df-adf46a52c1cc/close \
--header 'Accept: application/json' \
--header 'Authorization: YOUR-AUTHORIZATION' \
--header 'Identity: YOUR-IDENTITY'
Note that we provided Eline's credit account ID value e913d434-bda9-494e-b6df-adf46a52c1cc
as a path variable in this request.
Credit account balance must be zero
If the credit account balance is not zero, then attempts to close the account will be unsuccessful.
Refund security deposit account balance
Refunding the security deposit account balance can be done in a similar fashion to funding the security deposit account. The key difference is that the security deposit account ID should now be the origination_account_id
and the linked external bank account ID should now be the destination_account_id
. The amount of the ACH should be the available_balance
of the security deposit account.
Again, ACH timelines typically include time both for transactions to be processed and to be considered settled with the funds made available. For more information on ACH transfers, please refer to our documentation.
If the user does not have a linked external account, we recommend prompting the user to add a linked account. Otherwise, you will have to go through Bond’s support channels to have a check issued to the end-user.
Close security deposit account
After the refunding of the security deposit account has settled successfully, we are now ready to close the security deposit account. this can be accomplished through the Close an account endpoint. An example of a request to close Eline's security deposit account is provided below.
curl --request POST \
--url https://api.bond.tech/api/v0.1/accounts/173121d8-f05e-4bb6-b280-b5b761d2214f/close \
--header 'Accept: application/json' \
--header 'Authorization: YOUR-AUTHORIZATION' \
--header 'Identity: YOUR-IDENTITY'
Note that we provided Eline's security deposit account ID value 173121d8-f05e-4bb6-b280-b5b761d2214f
as a path variable in this request.
Security account balance must be zero
If the security deposit account balance is not zero, then attempts to close the account will be unsuccessful.
Updated over 1 year ago