Organization settings API reference
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, instrument templates, and compliance templates. The endpoints below handle only the plain key-value store.
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.
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
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
GET /api/v2/settings/{key} and POST /api/v2/settings return a single-resource envelope with only value inside data:
{
"data": { "value": "EUR" },
"links": { "self": "/v2/settings/BASE_CURRENCY" }
}A key that has never been set returns "value": null.
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
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.
curl --globoff "https://your-platform.example.com/api/v2/settings?filter[key]=CURRENC&sort=key" \
-H "x-api-key: YOUR_API_KEY"{
"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
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.
curl "https://your-platform.example.com/api/v2/settings/BASE_CURRENCY" \
-H "x-api-key: YOUR_API_KEY"{
"data": { "value": "EUR" },
"links": { "self": "/v2/settings/BASE_CURRENCY" }
}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.
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"
}'{
"data": { "value": "EUR" },
"links": { "self": "/v2/settings/BASE_CURRENCY" }
}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. The active chain must also support currency feeds: a system with no feed directory returns DALP-0604, and a write that arrives before the directory is indexed returns the retryable DALP-0602. See Errors and retry behavior for the full set.
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
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 /api/v2/settings/{key} removes a setting. Deleting a key that does not exist returns DALP-0172.
curl -X DELETE "https://your-platform.example.com/api/v2/settings/SYSTEM_ADDRESS" \
-H "x-api-key: YOUR_API_KEY"{
"data": null
}Errors and retry behavior
A write or delete can fail for two different reasons, and your retry logic should treat them differently. A terminal failure means the request, the value, or the current state is wrong, so the same call fails the same way until you change it. A transient failure means the call was valid but a dependency was not ready, so a later attempt can succeed. One operational error reports that an internal write did not complete. For the full catalog of platform error codes, see the Platform API error reference.
The codes below are the ones specific to the key-value settings store. Two well-known keys reach further. A TARGET_CURRENCIES write that enables a feed, and an AA_ENABLED write that turns on account abstraction, run identity and on-chain steps with their own permission and state errors, such as a missing feed-manager role or an unsynced participant identity. When you write those keys, also handle the role and identity codes listed in the Platform API error reference.
Terminal errors
Fix the request, the value, or the setting state before you retry. Store the request ID from the API response when you escalate a repeated platform error.
| Error | Status | What the platform observed | What to do |
|---|---|---|---|
DALP-0172 | 404 | A delete targeted a key that holds no value for this organization. | Confirm the key. A key that was never set has nothing to delete. |
DALP-0600 | 409 | A TARGET_CURRENCIES write dropped a currency that already has an on-chain feed. | Send a superset of the current set. A feed cannot be removed once it exists. |
DALP-0601 | 422 | A TARGET_CURRENCIES write added a currency the configured exchange-rate provider does not support. | Remove the listed codes, then resend. The response names the unsupported codes. |
DALP-0604 | 422 | A TARGET_CURRENCIES write targeted a system whose active chain has no currency-feed directory. | The setting was not saved. Target currencies need a chain that supports currency feeds. |
DALP-0617 | 403 | An AA_ENABLED write tried to turn on account abstraction while it is disabled at the platform level. | Enable account abstraction at the platform level first, then retry. |
DALP-0652 | 409 | An AA_ENABLED write tried to turn account abstraction off after it was already on. | Account abstraction is one-way. It cannot be disabled once enabled. |
Transient errors
Retry these after a short wait, or resolve the named cause first. The setting was not saved either way.
| Error | Status | What the platform observed | What to do |
|---|---|---|---|
DALP-0602 | 503 | A TARGET_CURRENCIES write could not queue currency-feed creation. The directory or organization identity may not be indexed yet, onboarding may be incomplete, or the caller may lack feed rights. | The setting was not saved. Retry once indexing catches up. If it persists, confirm onboarding finished, the calling admin has a bound wallet, and the caller can administer feeds, then retry. |
Operational write failure
| Error | Status | What the platform observed | What to do |
|---|---|---|---|
DALP-0170 | 500 | A POST /api/v2/settings write passed validation, but the platform could not confirm the change was saved. For TARGET_CURRENCIES this happens after feed dispatch; for AA_ENABLED after the on-chain sync; for other keys after the write attempt. | The value is unchanged. Retry the request. If it persists, escalate with the request ID and the setting key. |
Related references
Participant role assignments
Read participant role assignments across signing and operations addresses through the DALP Platform API, including the drift signal that flags when on-chain roles do not match.
Organization membership
Add a user to the active organization with a member or owner role through the DALP Platform API, including the permission, onboarding, and owner-grant rules and the exact error codes.