> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://infonite.dev/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://infonite.dev/_mcp/server.

# Investment accounts

GET https://clients.infonite.tech/api/executions/results/{execution_id}/financial/v1/investments/accounts

Securities accounts — the wrappers your customer's investments sit in.

Each one carries its identifiers, its currency and its valuation, and is the parent the stocks, funds and pension plans of the same execution hang from. Field by field in [Investments](/guides/data-models/banking/investments).

**This endpoint returns the containers, not the holdings.** What is inside them comes from [Stocks](api:GET/executions/results/\{execution_id}/financial/v1/investments/stocks), [Funds](api:GET/executions/results/\{execution_id}/financial/v1/investments/funds) and [Pension plans](api:GET/executions/results/\{execution_id}/financial/v1/investments/pensions), each behind its own feature — asking for the accounts alone gives you the wrappers and nothing in them.

Features are chosen when the execution **starts**, not here. An execution that did not ask for `investment_accounts_read` answers `204`, and the only way to get the data is to run another one.

| Status | Meaning                                                                                                                                 |
| :----- | :-------------------------------------------------------------------------------------------------------------------------------------- |
| `200`  | The investment accounts.                                                                                                                |
| `202`  | `feature_not_ready` — `investment_accounts_read` is still running. **Only this family waits**: the ones that already closed answer now. |
| `204`  | The execution never asked for `investment_accounts_read`. No body.                                                                      |
| `404`  | No execution with that id for your application, or it has been deleted.                                                                 |

**Server to server only.** This call is authorised with your application secret: it belongs in your backend, never in a browser, a mobile app or anything your customer can read.

Reference: https://infonite.dev/api-reference/direct-executions/direct-executions-api/fetching-the-results/financial-data/direct-executions-v-1-results-financial-investment-accounts

## Authentication

- `X-APP-SECRET` header (required) — Application Secret

## Servers

- `https://clients.infonite.tech/api` (Legacy Server, default)
- `https://clients.infonite.io/api` (Production Server)

## Request

### Path parameters

- `execution_id` (string, required) — The execution, as the acceptance response returned it.

## Response

### 200

**200 OK**The securities accounts themselves — the containers. What is held inside them is read from stocks, funds and pension plans, each with its own feature. **An empty list is an answer, not a gap**: the feature ran and the source reported none.

- `list of object`
  - `id` (string, required) — Product ID for the current execution. Note: it may change between executions.
  - `product` ("financial_account", required)
  - `sub_family` ("financial_account:investments", required)
  - `fetch_date` (string, required) — Date this product was fetched
  - `data_enrichment` (enum, required) — Data enrichment status. Indicates whether the product has been enriched with additional data. If not, the product will be filled with generic data.
    - Allowed values: `skipped`, `pending`, `processing`, `ready`, `failed`
  - `identifier` (object, required) — Account identifier
    - `type`: `clabe` (CLABE)
      - `control_digits` (string, required) — Control digit
      - `entity_code` (string, required) — Bank code
      - `entity_country` (string, required) — Bank Country
      - `entity_office` (string, required) — Bank office
      - `masked` (string, required) — Partial Clabe
      - `value` (string, required) — Clave Bancaria Estandarizada
    - `type`: `generic` (Generic Identifier)
      - `value` (string, required) — Identifier
      - `control_digits` (string, optional) — Control digits
      - `entity_code` (string, optional) — Entity code
      - `entity_country` (string, optional) — Entity country
      - `entity_office` (string, optional) — Entity office
    - `type`: `iban` (IBAN)
      - `control_digits` (string, required) — Control digits
      - `entity_code` (string, required) — Bank code
      - `entity_country` (string, required) — Bank Country
      - `entity_office` (string, required) — Bank office
      - `masked` (string, required) — Partial IBAN
      - `value` (string, required) — International Bank Account Number
  - `customer_segment` (enum, required)
    - Allowed values: `not_assigned`, `personal`, `business`, `corporate`, `private`, `retail`
  - `product_name` (string, required) — Product name
  - `product_alias` (string, optional) — Product alias
  - `product_description` (string, optional) — Product Description
  - `opening_date` (date, optional) — Account opening date
  - `valuation_date` (date, optional) — Valuation date
  - `valuation` (object, optional) — Valuation of the assets held in the account. (Deprecated, use `balance` instead)
    - `currency` (string or "***", required) — Three-letter ISO currency code — or `***` when the source did not disclose the currency.
    - `amount` (string, required) — Decimal number with 2 digits precision
  - `appreciation` (object, optional) — Monetary appreciation of the assets held in the account
    - `currency` (string or "***", required) — Three-letter ISO currency code — or `***` when the source did not disclose the currency.
    - `amount` (string, required) — Decimal number with 2 digits precision
  - `performance` (object, optional) — Account performance
    - `value` (string, optional) — Decimal number with 2 digits precision
    - `unit` ("%" or string, optional, default: %)
    - `description` (string, optional, nullable)

### 202

**202 Accepted**`feature_not_ready`: `investment_accounts_read` is still running. **You do not have to wait for the whole execution** — every family answers as soon as its own feature closes, so a slow source does not hold up the ones that already finished.

- `detail` (string, required) — Error message

## Errors

### 404 Not Found Error

**404 Not Found**No execution with that id for your application, or it has been deleted.

- `detail` (string, required) — Error message

### 422 Unprocessable Entity Error

Validation Error

- `detail` (list of object, optional)
  - `loc` (list of string or integer, required)
  - `msg` (string, required)
  - `type` (string, required)
  - `input` (any, optional)
  - `ctx` (object, optional)

## Examples

### One securities account

**Response**

```json
[
  {
    "id": "6aa75284bfa8241c43cb62fb",
    "product": "financial_account",
    "sub_family": "financial_account:investments",
    "fetch_date": "2026-09-12T01:48:52+00:00",
    "data_enrichment": "skipped",
    "identifier": {
      "type": "iban",
      "control_digits": "17",
      "entity_code": "9999",
      "entity_country": "ES",
      "entity_office": "0000",
      "masked": "ES969999************9653",
      "value": "ES9699990000171900259653"
    },
    "customer_segment": "personal",
    "product_name": "Cartera de Inversiones",
    "product_alias": "Mi Cartera de Inversiones EUR",
    "product_description": "Cartera de Inversiones para pruebas",
    "opening_date": "2023-01-01",
    "valuation_date": "2026-09-12",
    "valuation": {
      "currency": "EUR",
      "amount": "4300.00"
    },
    "appreciation": {
      "currency": "EUR",
      "amount": "NaN"
    },
    "performance": {
      "value": "NaN",
      "unit": "%"
    }
  }
]
```

**SDK Code**

```python One securities account
import requests

url = "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts"

headers = {"X-APP-SECRET": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript One securities account
const url = 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts';
const options = {method: 'GET', headers: {'X-APP-SECRET': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go One securities account
package main

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

func main() {

	url := "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-APP-SECRET", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby One securities account
require 'uri'
require 'net/http'

url = URI("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-APP-SECRET"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java One securities account
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts")
  .header("X-APP-SECRET", "<apiKey>")
  .asString();
```

```php One securities account
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts', [
  'headers' => [
    'X-APP-SECRET' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp One securities account
using RestSharp;

var client = new RestClient("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts");
var request = new RestRequest(Method.GET);
request.AddHeader("X-APP-SECRET", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift One securities account
import Foundation

let headers = ["X-APP-SECRET": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### This family has not finished

**Response**

```json
{
  "detail": "feature_not_ready"
}
```

**SDK Code**

```python This family has not finished
import requests

url = "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts"

headers = {"X-APP-SECRET": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript This family has not finished
const url = 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts';
const options = {method: 'GET', headers: {'X-APP-SECRET': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go This family has not finished
package main

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

func main() {

	url := "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-APP-SECRET", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby This family has not finished
require 'uri'
require 'net/http'

url = URI("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-APP-SECRET"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java This family has not finished
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts")
  .header("X-APP-SECRET", "<apiKey>")
  .asString();
```

```php This family has not finished
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts', [
  'headers' => [
    'X-APP-SECRET' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp This family has not finished
using RestSharp;

var client = new RestClient("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts");
var request = new RestRequest(Method.GET);
request.AddHeader("X-APP-SECRET", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift This family has not finished
import Foundation

let headers = ["X-APP-SECRET": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/investments/accounts")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```