> For the complete documentation index, see [llms.txt](https://developers.bloomcredit.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.bloomcredit.io/quick-start/furnishing-an-account.md).

# Furnish Accounts

This page will help you get started with Bloom's Furnishment API.

## Account

One consumer can hold multiple accounts. If a consumer has multiple accounts with the same product, such as a home loan with the same bank, then all the accounts will have the same Consumer name but a unique account ID that provides consumer loan details, EMI payment history, and principal amount balance details.

You can push all consumers' account details separately and their statements.

With the Furnishment API, you can create, update, retrieve, and delete accounts.

### Create an Account

{% hint style="warning" %}
**Important:**

You must create a credit product and a consumer before creating an account. A consumer can have many accounts.
{% endhint %}

Once you create a credit product, you can start creating accounts. The account details include:

* Credit Product ID
* Primary Consumer ID
* Primary Address ID
* Primary Designation
* Branch Identifier
* Account Opened Date
* Terms Duration
* External Account Identifier

{% hint style="warning" %}
**Business Accounts**

If you select a business credit product for your account, you must enter the attributes `business_name` and `business_address`.
{% endhint %}

Check out the [Create Account](/reference/furnishment-api/accounts/create-account.md) API reference to learn how to send a `POST` request to the Furnishment API with the account's information in the request body.

The response will include an id (hereafter referred to as `account_id`) that is used to uniquely identify the account.

### Account Creation Example Request

You can see an example of a `POST` request made to the **Create Account** endpoint below:

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://sandbox.bloom.dev/v2/furnishment/accounts/' \
--header 'Authorization: Bearer <ACCESS_TOKEN_WILL_BE_HERE>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "data": {
        "type": "AccountCreate",
        "attributes": {
            "credit_product_id": "<CREDIT_PRODUCT_ID_WILL_BE_HERE>",
            "primary_consumer_id": "<PRIMARY_CONSUMER_ID_WILL_BE_HERE>",
            "primary_address_id": "<PRIMARY_ADDRESS_ID_WILL_BE_HERE>",
            "external_account_identifier": "<EXTERNAL_ACCOUNT_IDENTIFIER_WILL_BE_HERE>",
            "primary_designation": "INDIVIDUAL",
            "branch_identifier": "ABCDEF",
            "account_opened_date": "2006-01-20",
            "terms_duration": "012"
        }
    }
}'
```

{% endtab %}

{% tab title="HTTP" %}

```http
POST /v2/furnishment/accounts/ HTTP/1.1
Host: sandbox.bloom.dev
Authorization: Bearer <ACCESS_TOKEN_WILL_BE_HERE>
Content-Type: application/json
Content-Length: 599

{
    "data": {
        "type": "AccountCreate",
        "attributes": {
            "credit_product_id": "<CREDIT_PRODUCT_ID_WILL_BE_HERE>",
            "primary_consumer_id": "<PRIMARY_CONSUMER_ID_WILL_BE_HERE>",
            "primary_address_id": "<PRIMARY_ADDRESS_ID_WILL_BE_HERE>",
            "external_account_identifier": "<EXTERNAL_ACCOUNT_IDENTIFIER_WILL_BE_HERE>",
            "primary_designation": "INDIVIDUAL",
            "branch_identifier": "ABCDEF",
            "account_opened_date": "2006-01-20",
            "terms_duration": "012"
        }
    }
}

```

{% endtab %}

{% tab title="JavaScript - Fetch" %}

```javascript
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <ACCESS_TOKEN_WILL_BE_HERE>");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "data": {
    "type": "AccountCreate",
    "attributes": {
      "credit_product_id": "<CREDIT_PRODUCT_ID_WILL_BE_HERE>",
      "primary_consumer_id": "<PRIMARY_CONSUMER_ID_WILL_BE_HERE>",
      "primary_address_id": "<PRIMARY_ADDRESS_ID_WILL_BE_HERE>",
      "external_account_identifier": "<EXTERNAL_ACCOUNT_IDENTIFIER_WILL_BE_HERE>",
      "primary_designation": "INDIVIDUAL",
      "branch_identifier": "ABCDEF",
      "account_opened_date": "2006-01-20",
      "terms_duration": "012"
    }
  }
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://sandbox.bloom.dev/v2/furnishment/accounts/", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

{% endtab %}

{% tab title="Python - Request" %}

```python
import requests
import json

url = "https://sandbox.bloom.dev/v2/furnishment/accounts/"

payload = json.dumps({
  "data": {
    "type": "AccountCreate",
    "attributes": {
      "credit_product_id": "<CREDIT_PRODUCT_ID_WILL_BE_HERE>",
      "primary_consumer_id": "<PRIMARY_CONSUMER_ID_WILL_BE_HERE>",
      "primary_address_id": "<PRIMARY_ADDRESS_ID_WILL_BE_HERE>",
      "external_account_identifier": "<EXTERNAL_ACCOUNT_IDENTIFIER_WILL_BE_HERE>",
      "primary_designation": "INDIVIDUAL",
      "branch_identifier": "ABCDEF",
      "account_opened_date": "2006-01-20",
      "terms_duration": "012"
    }
  }
})
headers = {
  'Authorization': 'Bearer <ACCESS_TOKEN_WILL_BE_HERE>',
  'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

```

{% endtab %}

{% tab title="Node.js" %}

```
var request = require('request');
var options = {
  'method': 'POST',
  'url': 'https://sandbox.bloom.dev/v2/furnishment/accounts/',
  'headers': {
    'Authorization': 'Bearer <ACCESS_TOKEN_WILL_BE_HERE>',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "data": {
      "type": "AccountCreate",
      "attributes": {
        "credit_product_id": "<CREDIT_PRODUCT_ID_WILL_BE_HERE>",
        "primary_consumer_id": "<PRIMARY_CONSUMER_ID_WILL_BE_HERE>",
        "primary_address_id": "<PRIMARY_ADDRESS_ID_WILL_BE_HERE>",
        "external_account_identifier": "<EXTERNAL_ACCOUNT_IDENTIFIER_WILL_BE_HERE>",
        "primary_designation": "INDIVIDUAL",
        "branch_identifier": "ABCDEF",
        "account_opened_date": "2006-01-20",
        "terms_duration": "012"
      }
    }
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://sandbox.bloom.dev/v2/furnishment/accounts/"
  method := "POST"

  payload := strings.NewReader(`{
    "data": {
        "type": "AccountCreate",
        "attributes": {
            "credit_product_id": "<CREDIT_PRODUCT_ID_WILL_BE_HERE>",
            "primary_consumer_id": "<PRIMARY_CONSUMER_ID_WILL_BE_HERE>",
            "primary_address_id": "<PRIMARY_ADDRESS_ID_WILL_BE_HERE>",
            "external_account_identifier": "<EXTERNAL_ACCOUNT_IDENTIFIER_WILL_BE_HERE>",
            "primary_designation": "INDIVIDUAL",
            "branch_identifier": "ABCDEF",
            "account_opened_date": "2006-01-20",
            "terms_duration": "012"
        }
    }
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Authorization", "Bearer <ACCESS_TOKEN_WILL_BE_HERE>")
  req.Header.Add("Content-Type", "application/json")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
```

{% endtab %}
{% endtabs %}

### Account Creation Example Response

You can see an example of a response to an account creation request below:

{% code title="JSON" %}

```json
{
    "data": {
        "id": "<ACCOUNT_ID_WILL_BE_HERE>",
        "type": "Account",
        "attributes": {
            "credit_product_id": "<CREDIT_PRODUCT_ID_WILL_BE_HERE>",
            "account_opened_date": "2006-01-20",
            "primary_consumer_id": "<PRIMARY_CONSUMER_ID_WILL_BE_HERE>",
            "primary_address_id": "<PRIMARY_ADDRESS_ID_WILL_BE_HERE>",
            "primary_designation": "INDIVIDUAL",
            "paid_off": false,
            "terms_duration": "012",
            "id": "<ACCOUNT_ID_WILL_BE_HERE>",
            "external_account_identifier": "<EXTERNAL_ACCOUNT_IDENTIFIER_WILL_BE_HERE>",
            "reported_consumer_account_number": "<REPORTED_CONSUMER_ACCOUNT_NUMBER_WILL_BE_HERE>",
            "secondary_consumers": [],
            "credit_line_suspended": false,
            "organization_id": "<ORGANIZATION_ID_WILL_BE_HERE>",
            "charge_off": {},
            "collateral": {},
            "collections": {},
            "lien": {},
            "positions": {},
            "payment_default": {},
            "forbearance": {}
        }
    }
}
```

{% endcode %}

***

## Statement

A statement indicates the summary of an account. They can be granted for almost every account representing ongoing transactions where funds are repeatedly exchanged.

Statements typically list debits paid, incoming funds or credits received by the account holder, and fees associated with maintaining the account.

With the Furnishment API, you can submit and retrieve statements.

### Submit a Statement

Once you create an account, you can start furnishing statements. The statement includes:

* Customer details
* Account details
* Payment details

Check out the [Create Statement](/reference/furnishment-api/statements/create-statement.md) API reference to learn how to send a `POST` request to the Furnishment API with the statement's information in the request body.

The response will include an id (hereafter referred to as `statement_id`) that is used to uniquely identify the account.

### Statement Creation Example Request

You can see an example of a `POST` request made to the **Create Statement** endpoint below:

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://sandbox.bloom.dev/v2/furnishment/statements/' \
--header 'Authorization: Bearer <ACCESS_TOKEN_WILL_BE_HERE>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "data": {
        "type": "StatementCreate",
        "attributes": {
            "id": "null",
            "account_id": "<ACCOUNT_ID_WILL_BE_HERE>",
            "statement_date": "2023-01-29",
            "current_balance": 0.00,
            "days_delinquent": 0,
            "credit_limit": 252.0,
            "scheduled_monthly_payment": 21.0,
            "actual_monthly_payment": 0.00,
            "amount_past_due": 0.00,
            "statement_identifier": "123456789-123456789-123456789",
            "last_payment_date": "2022-04-22"
        }
    }
}'
```

{% endtab %}

{% tab title="HTTP" %}

```http
POST /v2/furnishment/statements/ HTTP/1.1
Host: sandbox.bloom.dev
Authorization: Bearer <ACCESS_TOKEN_WILL_BE_HERE>
Content-Type: application/json
Content-Length: 541

{
    "data": {
        "type": "StatementCreate",
        "attributes": {
            "id": "null",
            "account_id": "<ACCOUNT_ID_WILL_BE_HERE>",
            "statement_date": "2023-01-29",
            "current_balance": 0.00,
            "days_delinquent": 0,
            "credit_limit": 252.0,
            "scheduled_monthly_payment": 21.0,
            "actual_monthly_payment": 0.00,
            "amount_past_due": 0.00,
            "statement_identifier": "123456789-123456789-123456789",
            "last_payment_date": "2022-04-22"
        }
    }
}
```

{% endtab %}

{% tab title="JavaScript - Fetch" %}

```javascript
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer <ACCESS_TOKEN_WILL_BE_HERE>");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "data": {
    "type": "StatementCreate",
    "attributes": {
      "id": "null",
      "account_id": "<ACCOUNT_ID_WILL_BE_HERE>",
      "statement_date": "2023-01-29",
      "current_balance": 0,
      "days_delinquent": 0,
      "credit_limit": 252,
      "scheduled_monthly_payment": 21,
      "actual_monthly_payment": 0,
      "amount_past_due": 0,
      "statement_identifier": "123456789-123456789-123456789",
      "last_payment_date": "2022-04-22"
    }
  }
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://sandbox.bloom.dev/v2/furnishment/statements/", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

{% endtab %}

{% tab title="Python - Request" %}

```python
import requests
import json

url = "https://sandbox.bloom.dev/v2/furnishment/statements/"

payload = json.dumps({
  "data": {
    "type": "StatementCreate",
    "attributes": {
      "id": "null",
      "account_id": "<ACCOUNT_ID_WILL_BE_HERE>",
      "statement_date": "2023-01-29",
      "current_balance": 0,
      "days_delinquent": 0,
      "credit_limit": 252,
      "scheduled_monthly_payment": 21,
      "actual_monthly_payment": 0,
      "amount_past_due": 0,
      "statement_identifier": "123456789-123456789-123456789",
      "last_payment_date": "2022-04-22"
    }
  }
})
headers = {
  'Authorization': 'Bearer <ACCESS_TOKEN_WILL_BE_HERE>',
  'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

```

{% endtab %}

{% tab title="Node.js" %}

```
var request = require('request');
var options = {
  'method': 'POST',
  'url': 'https://sandbox.bloom.dev/v2/furnishment/statements/',
  'headers': {
    'Authorization': 'Bearer <ACCESS_TOKEN_WILL_BE_HERE>',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "data": {
      "type": "StatementCreate",
      "attributes": {
        "id": "null",
        "account_id": "<ACCOUNT_ID_WILL_BE_HERE>",
        "statement_date": "2023-01-29",
        "current_balance": 0,
        "days_delinquent": 0,
        "credit_limit": 252,
        "scheduled_monthly_payment": 21,
        "actual_monthly_payment": 0,
        "amount_past_due": 0,
        "statement_identifier": "123456789-123456789-123456789",
        "last_payment_date": "2022-04-22"
      }
    }
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://sandbox.bloom.dev/v2/furnishment/statements/"
  method := "POST"

  payload := strings.NewReader(`{
    "data": {
        "type": "StatementCreate",
        "attributes": {
            "id": "null",
            "account_id": "<ACCOUNT_ID_WILL_BE_HERE>",
            "statement_date": "2023-01-29",
            "current_balance": 0.00,
            "days_delinquent": 0,
            "credit_limit": 252.0,
            "scheduled_monthly_payment": 21.0,
            "actual_monthly_payment": 0.00,
            "amount_past_due": 0.00,
            "statement_identifier": "123456789-123456789-123456789",
            "last_payment_date": "2022-04-22"
        }
    }
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Authorization", "Bearer <ACCESS_TOKEN_WILL_BE_HERE>")
  req.Header.Add("Content-Type", "application/json")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Statement Identifier**

The `statement identifier` attribute is set by you according to your organization's guidelines, and is different from the `statement_id` in the response.
{% endhint %}

### Statement Creation Example Response

You can see an example of a response to a Statement creation request below:

{% code title="JSON" %}

```json
{
    "data": {
        "id": "<STATEMENT_ID_WILL_BE_HERE>",
        "type": "Statement",
        "attributes": {
            "account_id": "<ACCOUNT_ID_WILL_BE_HERE>",
            "statement_date": "2023-01-29",
            "current_balance": 0.0,
            "days_delinquent": 0,
            "credit_limit": 252.0,
            "scheduled_monthly_payment": 21.0,
            "actual_monthly_payment": 0.0,
            "amount_past_due": 0.0,
            "last_payment_date": "2022-04-22",
            "highest_balance": 0.0,
            "statement_identifier": "123456789-123456789-123456789",
            "charge_off": {},
            "collateral": {},
            "collections": {},
            "lien": {},
            "forbearance": {},
            "positions": {},
            "payment_default": {},
            "deleted": {},
            "id": "<STATEMENT_ID_WILL_BE_HERE>",
            "modified_at": "2023-01-30T22:32:58.830855"
        }
    }
}
```

{% endcode %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://developers.bloomcredit.io/quick-start/furnishing-an-account.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
