# Organization settings API reference

Source: https://docs.settlemint.com/docs/api-reference/reference/organization-settings
Read, list, create, update, and delete an organization's key-value settings through the DALP Platform API, including the base currency, system address, target currencies, and account abstraction toggle.



Each organization keeps a set of key-value settings that configure how its platform behaves: the reporting base currency, the deployed system address, the fiat currencies that get on-chain price feeds, and whether account abstraction is enabled. Use these endpoints to read and write that store directly.

Reach for them when your integration manages organization configuration programmatically instead of through the Console. Each setting is scoped to the active organization, so you only ever see and change your own values.

The `/settings` path also hosts dedicated catalogs with richer schemas and their own pages: [asset class definitions](/docs/api-reference/reference/asset-class-definitions), [instrument templates](/docs/api-reference/reference/instrument-templates), and [compliance templates](/docs/api-reference/compliance/compliance-templates). The endpoints below handle only the plain key-value store.

## Endpoints [#endpoints]

| Endpoint                        | Use it for                                                        |
| ------------------------------- | ----------------------------------------------------------------- |
| `GET /api/v2/settings`          | List settings with pagination, search, sorting, and facet counts. |
| `GET /api/v2/settings/{key}`    | Read one setting value by its key.                                |
| `POST /api/v2/settings`         | Create or update a setting value.                                 |
| `DELETE /api/v2/settings/{key}` | Delete a setting.                                                 |

Read responses use the DALP single-resource envelope with `data` and `links.self`. List responses use the collection envelope with `data`, `meta`, and pagination `links`. Delete responses return `{ "data": null }`.

Set the participant and wallet context with the standard request headers before calling these endpoints. See [Request headers](/docs/api-reference/reference/request-headers).

## Required roles [#required-roles]

| Operation              | Roles (any of)             |
| ---------------------- | -------------------------- |
| Read, list             | `admin`, `owner`, `member` |
| Create, update, delete | `admin`, `owner`           |

Any authenticated member of the organization can read settings. Only administrators and owners can change or remove them.

## Setting fields [#setting-fields]

### List responses [#list-responses]

`GET /api/v2/settings` returns a paginated collection. Each item in `data` contains these fields:

| Field         | Type   | Description                                     |
| ------------- | ------ | ----------------------------------------------- |
| `key`         | string | The unique key that identifies the setting.     |
| `value`       | string | The setting value, stored and returned as text. |
| `lastUpdated` | string | Timestamp when the value was last written.      |

Values are always strings. A setting that holds a list, such as the set of target currencies, stores a JSON-encoded array in `value`.

### Read and upsert responses [#read-and-upsert-responses]

`GET /api/v2/settings/{key}` and `POST /api/v2/settings` return a single-resource envelope with only `value` inside `data`:

```json
{
  "data": { "value": "EUR" },
  "links": { "self": "/v2/settings/BASE_CURRENCY" }
}
```

A key that has never been set returns `"value": null`.

## Well-known keys [#well-known-keys]

Some keys carry validation and behavior beyond a plain string write.

| Key                 | Expected value                                           | Notes                                                                                                                    |
| ------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| `BASE_CURRENCY`     | An ISO 4217 currency code, such as `EUR`.                | The currency used to express portfolio and statistics values.                                                            |
| `SYSTEM_ADDRESS`    | An Ethereum address (`0x...`), or an empty string.       | The deployed system contract for the organization.                                                                       |
| `TARGET_CURRENCIES` | A JSON array of ISO 4217 codes, such as `["EUR","USD"]`. | Currencies that get on-chain price feeds. Additive only; see below.                                                      |
| `AA_ENABLED`        | `"true"` or `"false"`.                                   | Whether account abstraction is enabled for the organization. One-way; see below.                                         |
| `AA_WARN_DAYS`      | A positive integer as a string, such as `"7"`.           | Days before account-abstraction expiry to show a warning. Cannot be POST-upserted; delete and re-create to reset.        |
| `AA_CRITICAL_DAYS`  | A positive integer as a string, such as `"3"`.           | Days before account-abstraction expiry to show a critical alert. Cannot be POST-upserted; delete and re-create to reset. |

The write schema accepts only `BASE_CURRENCY`, `SYSTEM_ADDRESS`, `TARGET_CURRENCIES`, and `AA_ENABLED`. POSTing any other key fails validation. The read and delete parameters accept all six keys above, so a request for an unknown key still returns a validation error rather than a not-found response.

## List settings [#list-settings]

`GET /api/v2/settings` returns the active organization's settings. The list supports pagination, global search across `key` and `value`, sorting by `key` (default) or `lastUpdated`, and filtering by `key`, `value`, or an `lastUpdated` date range. The `value` field is filterable but not sortable.

```bash
curl --globoff "https://your-platform.example.com/api/v2/settings?filter[key]=CURRENC&sort=key" \
  -H "x-api-key: YOUR_API_KEY"
```

```json
{
  "data": [
    {
      "key": "BASE_CURRENCY",
      "value": "EUR",
      "lastUpdated": "2026-01-01T00:00:00.000Z"
    },
    {
      "key": "TARGET_CURRENCIES",
      "value": "[\"EUR\",\"USD\"]",
      "lastUpdated": "2026-01-01T00:00:00.000Z"
    }
  ],
  "meta": {
    "total": 2,
    "facets": {}
  },
  "links": {
    "self": "/v2/settings?filter[key]=CURRENC&sort=key&page[offset]=0&page[limit]=50",
    "first": "/v2/settings?filter[key]=CURRENC&sort=key&page[offset]=0&page[limit]=50",
    "prev": null,
    "next": null,
    "last": "/v2/settings?filter[key]=CURRENC&sort=key&page[offset]=0&page[limit]=50"
  }
}
```

## Read a setting [#read-a-setting]

`GET /api/v2/settings/{key}` returns one value. A key that has never been set returns `"value": null` rather than an error, so a client can probe for a setting without handling a not-found case.

```bash
curl "https://your-platform.example.com/api/v2/settings/BASE_CURRENCY" \
  -H "x-api-key: YOUR_API_KEY"
```

```json
{
  "data": { "value": "EUR" },
  "links": { "self": "/v2/settings/BASE_CURRENCY" }
}
```

## Create or update a setting [#create-or-update-a-setting]

`POST /api/v2/settings` writes a value, creating the key if it does not exist. Send a `key` and a `value`.

```bash
curl -X POST "https://your-platform.example.com/api/v2/settings" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "BASE_CURRENCY",
    "value": "EUR"
  }'
```

```json
{
  "data": { "value": "EUR" },
  "links": { "self": "/v2/settings/BASE_CURRENCY" }
}
```

### Target currencies are additive [#target-currencies-are-additive]

`TARGET_CURRENCIES` drives on-chain price feeds, and a feed cannot be removed once it exists. Each write must therefore be a superset of the current set. You can add currencies, but a request that drops a previously enabled currency is rejected with `DALP-0600`. Every added currency must be supported by the configured exchange-rate provider. An unsupported code returns `DALP-0601`, which lists the offending codes.

```bash
curl -X POST "https://your-platform.example.com/api/v2/settings" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "TARGET_CURRENCIES",
    "value": "[\"EUR\",\"USD\"]"
  }'
```

### Account abstraction is one-way [#account-abstraction-is-one-way]

`AA_ENABLED` can be turned on but not off. Once it is `"true"`, a request to set it back to `"false"` returns `DALP-0652`. Enabling it also requires account abstraction to be enabled at the platform level first. Without that, the request returns `DALP-0617`.

## Delete a setting [#delete-a-setting]

`DELETE /api/v2/settings/{key}` removes a setting. Deleting a key that does not exist returns `DALP-0172`.

```bash
curl -X DELETE "https://your-platform.example.com/api/v2/settings/SYSTEM_ADDRESS" \
  -H "x-api-key: YOUR_API_KEY"
```

```json
{
  "data": null
}
```

## Related references [#related-references]

* [Asset class definitions](/docs/api-reference/reference/asset-class-definitions)
* [Instrument templates](/docs/api-reference/reference/instrument-templates)
* [Compliance templates](/docs/api-reference/compliance/compliance-templates)
* [Platform API error reference](/docs/api-reference/errors/error-code-reference)
