Creating a secured charge card
How to create a secured charge card, from getting your API keys to making payments.
Overview
This guide covers the following elements of Bond's secured charge card experience:
- What is a secured charge card?
- Prerequisites
- Issuing a secured charge card
- Making a repayment
- Closing a charge card
What is a secured charge card?
A secured charge card pairs a charge card with a security deposit account. The balance in the security deposit account is effectively the credit limit of the charge card, and repayments on the charge card can be made from either the security deposit account or another bank account.
Since the balance of the account starts at zero, users can't spend on their charge cards without funding the security deposit account. The security deposit account can be funded by various methods, including ACH and direct deposit.
Prerequisites
Before you can create a secured charge card, you need to successfully complete the following steps:
1. Getting your API keys
To interact with the API endpoints on Bond's platform, a pair of identity
and authorization
API keys must be supplied in the request headers. For more information, see Getting your API key.
2. Finding your Program ID
A Program ID is a UUID value provided by Bond that represents a relationship between you and a bank and is often associated one-to-one with a financial product. For the puposes of this guide, the program ID is associated with consumer secured credit accounts. You can find your program_id
in the Bond Portal under the Developers tab. For more information, see Getting your Program ID.
3. Registering webhooks
We use 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 by the webhooks can also be queried using synchronous API requests. For this guide we are interested in webhooks specifically in the following categories:
credit
kyc
transactions
cards
Webhook registration can be done through Bond Portal or via API. For more information, see Webhook events and subscriptions.
Creating the secured charge card
The status of an 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 can issue a secured charge card. Secured charge cards are issued using our Create a card API.
Creation of a card not only creates the card, but also creates an associated credit account.
An example of a secured charge card creation request is shown 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 '
{
"account_id": "173121d8-f05e-4bb6-b280-b5b761d2214f"
}
'
Note that we pass the security_deposit_account_id
value in the request account_id
field. This allows us to link the card with the security deposit account.
An example of a successful card creation request is shown 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_1dJbCBY9ucg8MohvYy7HyA",
"cvv": "tok_live_6dSxybBYBXbFq6KLzc2kW9",
"expiry_date": "tok_live_1dJbCXY1tcg4MohvYy7SyZ",
"last_four": "6270",
"status": "active",
"card_design_id": null
}
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.
Card Expiry Dates
The expiry dates for cards are configurable for your live program, but the recommended Bond default for expiry is 36 months from card issue.
Making a repayment
Generating 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, see Statements guide.
Initializing a payment
You can initialize a payment from either 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.
Paying from a security deposit account
To initialize a transfer from our example security deposit account to our card, use the Create a transfer API.
An example of a transfer initialization request is shown 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 '{
"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
to indicate that the funds should move from security_deposit_account_id
to the credit_account_id
.
An example of a successful response is shown 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
}
Paying from an external account
To initialize a transfer from an external bank account, use the Create a transfer API in the same way that we funded the security deposit account.
An example of a transfer initialization request is shown 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 external_account_id
to the credit_account_id
.
An example of a successful response is shown 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": "R73",
"failure_reason": null
}
}
Closing a secured charge card
To be able to close a secured charge card you need to perform the following operations:
- Change the card to inactive status
- Execute final repayment cycle
- Close credit account
- Refund security deposit account balance
- Close security deposit account
Changing the card to Inactive status
To close Eline's card, we need to ensure that no further transactions occur on the card. This is done by changing the card status to inactive
using our Update Card endpoint.
An example of a card status update request is shown 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 the card_Id
value 057c6074-a02d-4a5a-bad9-bbc64b047df7
as a path variable in the request.
An example of a successful response is shown 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
}
Executing the final repayment cycle
The credit account balance must be zero
If the credit account balance is not zero, attempts to close the account will be unsuccessful.
Now that the card has been made inactive, one final repayment cycle must be executed to bring the balance of the secured 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.
Closing the credit account
After the last repayment cycle has settled successfully, the secured charge card credit account is now ready to be closed. This is done using our 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, attempts to close the account will be unsuccessful.
Refunding a security deposit account balance
Refunding the security deposit account balance is done in a similar way to funding the security deposit account. The key difference is that the security_deposit_account_id
is now the origination_account_id
and the external_account_id
is now the destination_account_id
.
Again, ACH timelines typically include time both for transactions to be processed and to be considered settled before the funds are made available.
For more information, see ACH transfers.
Closing the security deposit account
After the refunding of the security deposit account has settled successfully, we can close the security deposit account. This is done using our Close an account endpoint.
An example of a request to close Eline's security deposit account is shown 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 provide Eline's security_deposit_account_id
value 173121d8-f05e-4bb6-b280-b5b761d2214f
as a path variable.
Updated almost 2 years ago