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:

  1. Create API keys
  2. Find your program ID
  3. Register a webhook

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:

  1. Create a customer
  2. Create a credit application
  3. Submit credit application
  4. Fund the security deposit account
  5. 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 WebhookNotes
kyc.verification.document_requiredThe 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_informationNote 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.failureWhen 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 and account_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:

  1. Generate a statement
  2. Initialize payment

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:

  1. Change card to inactive status
  2. Execute final repayment cycle
  3. Close credit account
  4. Refund security deposit account balance
  5. 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.