> 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.

# Credit registry

GET https://clients.infonite.tech/api/executions/results/{execution_id}/public/v1/credit/registry

Your customer's risk position at the Banco de España's credit registry (CIRBE).

Every loan, credit line and guarantee above the reporting threshold, entity by entity. It is the reference document for indebtedness analysis, and the one that shows debt your own institution cannot see. Field by field in [Credit Registry](/guides/data-models/credit-registry). The official report travels as a [document](api:GET/executions/results/\{execution_id}/attachments/v1/all) of the execution.

**This source is slow by nature.** The registry produces its report on its own schedule rather than in real time, so an execution that includes this feature can take substantially longer than one that does not — and the widget-side flow even lets your customer go before it answers. Plan for a webhook rather than a polling loop, and do not size your timeout on the other features.

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

| Status | Meaning                                                                                                                             |
| :----- | :---------------------------------------------------------------------------------------------------------------------------------- |
| `200`  | The registry position.                                                                                                              |
| `202`  | `feature_not_ready` — `credit_registry_data` is still running. **Only this family waits**: the ones that already closed answer now. |
| `204`  | The execution never asked for `credit_registry_data`, or it did and the source had nothing to give. No body either way.             |
| `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/public-administration/direct-executions-v-1-results-public-credit-registry

## 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**What the central credit register holds on your customer: the risks declared by the institutions that lent to them, by kind and amount. It is the view of their borrowing that does not depend on which bank you asked. **An empty list is an answer, not a gap**: the feature ran and the source reported none.

- `list of object`
  - `product` ("credit_registry_data", required) — The product type identifier.
  - `sub_family` (enum, required) — The sub-family specifying detailed or aggregated registry data.
    - Allowed values: `credit_registry_data:es_cirbe_detailed`, `credit_registry_data:es_cirbe_aggregated`
  - `fetch_date` (string, required) — Date this product was fetched.
  - `country` (string, required) — Country of the credit registry.
  - `holder_name` (string, required) — Full name or business name of the holder.
  - `report_month` (string, required) — Target month and year of the operation report in MM-YYYY format.
  - `holder_code` (string, optional, nullable) — Identification code of the holder in the registry.
  - `identifier` (object, optional, nullable) — National identifier of the holder.
    - `type` (enum, required) — Kind of document the number belongs to (e.g. a national ID, passport, tax ID, or Social Security number).
      - Allowed values: `unknown`, `es:dni`, `es:nie`, `es:cif`, `es:ssn`, `co:cc`, `co:ce`, `co:nit`, `co:ti`
    - `value` (string, required) — The number itself, as reported by the source.
    - `validated` (boolean, required) — True when the value passed the platform's format and check-digit validation. It vouches for the NUMBER being well-formed — not for the official status of the document behind it.
    - `country` (string, optional, nullable) — Country that issued the number, as a two-letter ISO code.
    - `valid_until` (date, optional) — Expiry date of the document, when the source reports it.
  - `consultation_date` (string, optional, nullable) — Timestamp when the report was issued/consulted.
  - `total_drawn` (map from string to string, optional) — Total active drawn risk amount in the system.
  - `total_overdue` (map from string to string, optional) — Total risk amount that is overdue in the system.
  - `total_arrears` (map from string to string, optional) — Total overdue interest and expenses in the system.
  - `total_risk_available` (map from string to string, optional) — Total available risk amount in the system.
  - `operations` (list of object, optional, default: []) — List of operations reported in the registry.
    - `product_type` (string, required)
    - `intervention_nature` (string, required)
    - `currency` (string, required)
    - `total_drawn` (map from string to string, required)
    - `entity_name` (string, optional, nullable)
    - `entity_code` (string, optional, nullable)
    - `operation_code` (string, optional, nullable)
    - `collective_status` (string, optional, nullable)
    - `participants_number` (integer, optional, nullable)
    - `maturity_type` (string, optional, nullable)
    - `real_guarantee_type` (string, optional, nullable)
    - `real_guarantee_coverage` (map from string to string, optional, nullable)
    - `personal_guarantee_type` (string, optional, nullable)
    - `personal_guarantee_coverage` (map from string to string, optional, nullable)
    - `operation_status` (string, optional, nullable)
    - `overdue` (map from string to string, optional, nullable)
    - `arrears` (map from string to string, optional, nullable)
    - `risk_available` (map from string to string, optional, nullable)
  - `minor_risks` (list of object, optional, default: []) — List of entities with accumulated risks below the threshold.
    - `entity_name` (string, required)
    - `limit_amount` (map from string to string, required)
    - `entity_code` (string, optional, nullable)
  - `attachments` (list of object, optional, default: []) — List of attached original documents (e.g. PDF).
    - `sub_family` (enum, required) — What kind of document this is (e.g. `attachment:es-tgss-life-report`).
      - Allowed values: `attachment:attachment`, `attachment:supplier_invoice`, `attachment:client_invoice`, `attachment:es-tgss-life-report`, `attachment:es-tgss-contribution-base-report`, `attachment:es-aeat-model-100`, `attachment:es-cirbe-report`, `attachment:sepa-direct-debit-bill`
    - `id` (string, required) — Attachment identifier — use it to download the file through the execution's attachments endpoint.
    - `content_name` (string, required) — File name of the document.
    - `content_type` (string, required) — MIME type of the content.
    - `metadata` (map from string to any, required) — Extra facts about the document, as simple key-value pairs (e.g. its official verification code, its issue date).
    - `product` ("attachment", optional, default: attachment) — The product type identifier. Always `attachment`.
    - `content_hash` (string, optional) — Fingerprint of the content, to verify its integrity.

### 202

**202 Accepted**`feature_not_ready`: `credit_registry_data` 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

### The CIRBE position, entity by entity

**Response**

```json
[
  {
    "product": "credit_registry_data",
    "sub_family": "credit_registry_data:es_cirbe_detailed",
    "fetch_date": "2026-09-12T01:28:15+00:00",
    "country": "ES",
    "holder_name": "LISANDRO TAPIA BERENGUER",
    "report_month": "09-2026",
    "holder_code": "ES44444444A",
    "identifier": {
      "type": "es:dni",
      "value": "44444444A",
      "validated": true,
      "country": "ES"
    },
    "consultation_date": "2026-09-12T01:28:15+00:00",
    "total_drawn": {
      "amount": "1500.00",
      "currency": "EUR"
    },
    "total_overdue": {
      "amount": "0.00",
      "currency": "EUR"
    },
    "total_arrears": {
      "amount": "0.00",
      "currency": "EUR"
    },
    "total_risk_available": {
      "amount": "3500.00",
      "currency": "EUR"
    },
    "operations": [
      {
        "product_type": "V32",
        "intervention_nature": "T11",
        "currency": "EUR",
        "total_drawn": {
          "amount": "1500.00",
          "currency": "EUR"
        },
        "entity_name": "Banco Santander S.A.",
        "entity_code": "0049",
        "operation_code": "OP-SAN-1234",
        "collective_status": "Solidario",
        "participants_number": 2,
        "maturity_type": "L08",
        "operation_status": "Al corriente",
        "risk_available": {
          "amount": "3500.00",
          "currency": "EUR"
        }
      }
    ],
    "minor_risks": [
      {
        "entity_name": "Cofidis S.A. Sucursal en España",
        "limit_amount": {
          "amount": "1000.00",
          "currency": "EUR"
        },
        "entity_code": "2000"
      }
    ],
    "attachments": [
      {
        "sub_family": "attachment:es-cirbe-report",
        "id": "6aa74daf9f005f6719cb62df",
        "content_name": "cirbe_report_es_cirbe_detailed.pdf",
        "content_type": "application/pdf",
        "metadata": {
          "document-date": "2026-09-12T03:28:15.068346+02:00",
          "document-type": "attachment:es-cirbe-report",
          "signature-verified": true
        },
        "product": "attachment",
        "content_hash": "80b3ad5dc1b5fec5eb7fb53ba9b9d6498ff4f2f13d82d50859445c22db0c1006c7fc66d817a17ba38523cd2b7f73a629281bb273b6081ae2c344a7c01ee195ec"
      }
    ]
  }
]
```

**SDK Code**

```python The CIRBE position, entity by entity
import requests

url = "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/credit/registry"

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

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

print(response.json())
```

```javascript The CIRBE position, entity by entity
const url = 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/credit/registry';
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 The CIRBE position, entity by entity
package main

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

func main() {

	url := "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/credit/registry"

	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 The CIRBE position, entity by entity
require 'uri'
require 'net/http'

url = URI("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/credit/registry")

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 The CIRBE position, entity by entity
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/public/v1/credit/registry")
  .header("X-APP-SECRET", "<apiKey>")
  .asString();
```

```php The CIRBE position, entity by entity
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

```csharp The CIRBE position, entity by entity
using RestSharp;

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

```swift The CIRBE position, entity by entity
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/public/v1/credit/registry")! 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/public/v1/credit/registry"

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/public/v1/credit/registry';
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/public/v1/credit/registry"

	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/public/v1/credit/registry")

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/public/v1/credit/registry")
  .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/public/v1/credit/registry', [
  '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/public/v1/credit/registry");
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/public/v1/credit/registry")! 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()
```