> This page is for Spain Public Administration Flow.

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

# Get Session Settings

GET https://widgets.infonite.tech/api/flows/es-public-administration/v1/manager/{session_id}/settings

Retrieve the resolved configuration settings applied to the flow session.

This endpoint returns the final settings active for the session. These settings are resolved by merging:
1. The custom parameters requested in the session initialization payload ([Create Session](https://infonite.dev/flows/spain-public-administration/api-reference/spain-public-administration-api/sessions-management/flows-es-public-administration-v-1-session-create)).
2. The default settings configured for the client application.
3. Global system defaults.

Its primary utility is diagnostic, allowing clients and auditing tools to verify the exact rules, features, and sandbox configurations executing for the flow session.

> This endpoint needs to be executed with an app secret, so should always be used in server side without exposing the secret to customers.


Reference: https://infonite.dev/flows/spain-public-administration/api-reference/spain-public-administration-api/sessions-management/flows-es-public-administration-v-1-session-settings

## Authentication

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

## Servers

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

## Request

### Path parameters

- `session_id` (string, required) — Session ID to fetch

## Response

### 200

**200 OK**The settings the session runs with

- `sandbox` (boolean, required) — Indicates if the session is running in sandbox/mock mode for testing.
- `consent_level` (enum, required) — The level of consent screening displayed to the user inside the widget.
  - Allowed values: `none`, `basic`
- `hooks_extra_data` (map from string to string, required) — Extra data to be included in the hooks. This data will be returned in the webhook as part of the URL as query parameters. This can be useful to include dynamic data in the webhook. There are some template variables that can be used: * `{app_id}`: Your app ID * `{customer_id}`: The customer ID * `{session_id}`: The Session ID * `{parameters_id}`: The unique credentials ID, this identifier is computed by the engine based on the fixed part of the credentials (e.g. the username) * `{producer}`: The producer of the event * `{event}`: The event that triggered the hook * `{status_code}`: The status of the flow at the moment of the event For example, passing: ```json { "custom_param": "customValue", "current_event": "{event}", "status": "{status_code}", "id": "{session_id}" } ``` Will result in the following URL: `https://your.url.com/your/path?custom_param=customValue&current_event=ended&status=COMPLETED&id=67d7d9b72eb0693e7da47a0e` > **Note:** This data is not encrypted and should not contain sensitive information.
- `executions_features` (list of FlowSettingsSchemaExecutionsFeaturesItems, required) — The list of public administration portals and features configured for extraction.
- `completion_mode` (enum, required) — The redirection behavior mode executed after the user completes the flow.
  - Allowed values: `do_nothing`, `redirect`, `redirect_blank`
- `completion_extra_data` (map from string to string, required) — Extra data to be included in the redirect URL. This data will be added to the the url as query parameters. This can be useful to include dynamic data in the webhook. There are some template variables that can be used in the URL: * `{app_id}`: Your app ID * `{customer_id}`: The customer ID * `{session_id}`: The Session ID * `{status_code}`: The final status code of the session For example, passing: ```json { "custom_param": "customValue", "status": "{status_code}", "id": "{session_id}" } ``` Will result in the following URL: `https://your.url.com/your/path?custom_param=customValue&status=COMPLETED&id=67d7d9b72eb0693e7da47a0e` > **Note:** This data is not encrypted and should not contain sensitive information.
- `allowed_engines` (list of string, required) — The engines the session offers right now, computed on every read. Never sent: the administrations a session may use are set with `allowed_sources`.
- `allowed_sources` (list of enum, required) — The administrations this session may connect to, in order of preference: what the session was opened with, else your application's default, else `["tgss", "aeat", "citizen_folder"]`.
  - Allowed values: `tgss`, `aeat`, `citizen_folder`, `dgt`, `bde`
- `completion_url` (string, optional) — The redirection target URL where the user is sent upon session completion or failure.

## Errors

### 404 Not Found Error

**404 Not Found**Session not found

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

### 422 Unprocessable Entity Error

Validation Error

- `detail` (list of ValidationError, optional)

### 429 Too Many Requests Error

**429 Too Many Requests**Too many requests. Rate limit exceeded.

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

## Types

### FlowSettingsSchemaExecutionsFeaturesItems

- `code`: `academic_data` (Academic Data)
  - `configurations` (catgrid_forms__engines__features__public__academic_data__FeatureConfigurations, optional)
- `code`: `credit_registry_data` (Credit Registry Data)
  - `configurations` (catgrid_forms__engines__features__public__credit_registry_data__FeatureConfigurations, optional)
- `code`: `customer_information_read` (Customer Information Read)
  - `configurations` (IFeatureConfigurations, optional) — This feature does not require any configuration
- `code`: `driver_data` (Driver Data)
  - `configurations` (catgrid_forms__engines__features__public__driver_data__FeatureConfigurations, optional)
- `code`: `labor_check` (Labor Check)
  - `configurations` (catgrid_forms__engines__features__public__labor_check__FeatureConfigurations, optional)
- `code`: `properties_data` (Properties Data)
  - `configurations` (catgrid_forms__engines__features__public__properties_data__FeatureConfigurations, optional)
- `code`: `public_pensions` (Public Pensions)
  - `configurations` (IFeatureConfigurations, optional) — This feature does not require any configuration
- `code`: `vehicles_data` (Vehicles Data)
  - `configurations` (catgrid_forms__engines__features__public__vehicles_data__FeatureConfigurations, optional)
- `code`: `yearly_individual_tax` (Yearly Taxes for Individuals)
  - `configurations` (catgrid_forms__engines__features__public__yearly_individual_tax__FeatureConfigurations, optional)

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)
- `input` (any, optional)
- `ctx` (ValidationErrorCtx, optional)

### catgrid_forms__engines__features__public__academic_data__FeatureConfigurations

### catgrid_forms__engines__features__public__credit_registry_data__FeatureConfigurations

- `preferred_type` (enum, optional) — Preferred credit registry report type to retrieve
  - Allowed values: `credit_registry_data:es_cirbe_detailed`, `credit_registry_data:es_cirbe_aggregated`

### IFeatureConfigurations

This feature does not require any configuration

### catgrid_forms__engines__features__public__driver_data__FeatureConfigurations

- `read_point_movements` (boolean, optional, default: false)

### catgrid_forms__engines__features__public__labor_check__FeatureConfigurations

- `from_date` (date, optional, default: 5 years ago) — The date from which the contribution history is returned. Five years back by default; a date further back than eighty years reads eighty, and one less than a year back reads one year.
- `work_life_report` (boolean, optional, default: true) — Whether to attach the official work-life report (PDF) to the labor check. The labor check reads it either way.
- `contribution_base_report` (boolean, optional, default: false) — Whether to attach the official contribution-base report (PDF) to the labor check. The labor check reads it either way.

### catgrid_forms__engines__features__public__properties_data__FeatureConfigurations

### catgrid_forms__engines__features__public__vehicles_data__FeatureConfigurations

- `simple_vehicle_report` (boolean, optional, default: false)

### catgrid_forms__engines__features__public__yearly_individual_tax__FeatureConfigurations

- `last_n_years` (integer, optional, default: 3) — How many closed fiscal years to read, counting back from last year: 1 to 5.

### ValidationErrorLocItems

- string
- integer

### ValidationErrorCtx

## Examples

**Response**

```json
{
  "sandbox": true,
  "consent_level": "none",
  "hooks_extra_data": {
    "current_event": "ended",
    "custom_param": "sessionTracking123",
    "id": "644599da47847b79c03cc94f",
    "status": "COMPLETED"
  },
  "executions_features": [
    {
      "code": "labor_check",
      "configurations": {
        "from_date": "2023-04-12",
        "work_life_report": true,
        "contribution_base_report": false
      }
    }
  ],
  "completion_mode": "do_nothing",
  "completion_extra_data": {
    "custom_param": "sessionTracking123",
    "id": "644599da47847b79c03cc94f",
    "status": "COMPLETED"
  },
  "allowed_engines": [
    "tgss_engine_v2"
  ],
  "completion_url": "https://clientapp.example.com/flow-complete"
}
```

**SDK Code**

```python
import requests

url = "https://widgets.infonite.tech/api/flows/es-public-administration/v1/manager/644599da47847b79c03cc94f/settings"

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

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

print(response.json())
```

```javascript
const url = 'https://widgets.infonite.tech/api/flows/es-public-administration/v1/manager/644599da47847b79c03cc94f/settings';
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
package main

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

func main() {

	url := "https://widgets.infonite.tech/api/flows/es-public-administration/v1/manager/644599da47847b79c03cc94f/settings"

	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
require 'uri'
require 'net/http'

url = URI("https://widgets.infonite.tech/api/flows/es-public-administration/v1/manager/644599da47847b79c03cc94f/settings")

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
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://widgets.infonite.tech/api/flows/es-public-administration/v1/manager/644599da47847b79c03cc94f/settings")
  .header("X-APP-SECRET", "<apiKey>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://widgets.infonite.tech/api/flows/es-public-administration/v1/manager/644599da47847b79c03cc94f/settings', [
  'headers' => [
    'X-APP-SECRET' => '<apiKey>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://widgets.infonite.tech/api/flows/es-public-administration/v1/manager/644599da47847b79c03cc94f/settings");
var request = new RestRequest(Method.GET);
request.AddHeader("X-APP-SECRET", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://widgets.infonite.tech/api/flows/es-public-administration/v1/manager/644599da47847b79c03cc94f/settings")! 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()
```