Zum Inhalt
edoobox Docs
Kostenlos testen 7 Tage unverbindlich testen
Menü
Kostenlos testen 7 Tage unverbindlich testen
OpenAPI herunterladen
settingsAPI-Referenz
PUT/v2/settings/{id}

Account-Einstellungen ändern

Aktualisiert die übergebenen zentralen Account-Einstellungen. Es werden nur bekannte, schreibbare Structure-Felder verarbeitet; Datums-/Zahlen-/Schalterwerte werden gemäß dem jeweiligen Feld normalisiert. Dynamische Datenfeldnamen für Mehrfachanmeldung oder Zweitemail müssen zur aktuellen Teilnehmerdatenstruktur gehören. Sprach-, Präsenz-, Abrechnungs- und Buchungsregeln können weitere native Validierungen und Folgeänderungen auslösen; Abonnement-/Berechtigungsfreigaben bleiben maßgeblich.

Operation-ID put_v2_settings_id

01

Vertrag & Verhalten

Dokumentationsstand
reviewed
Ändert Zustand
Ja
Als readOnly markiert
Nein
Für Automation markiert
Nein
02

Authentifizierung

Eine der folgenden Alternativen muss erfüllt sein (ODER). Innerhalb jeder Alternative werden alle angegebenen Schemas gemeinsam benötigt (UND).

Alternative 1

bearerAuthhttp · bearer

Existing edoobox v2 access token. Never substitute API key/secret headers.

Format: JWT

Security-Schema als JSON
{
  "type": "http",
  "scheme": "bearer",
  "bearerFormat": "JWT",
  "description": "Existing edoobox v2 access token. Never substitute API key/secret headers."
}
accountContextapiKey

Selected login/account context from the JWT, not a database primary key. Required even for a JWT with one account.

header: edid

Security-Schema als JSON
{
  "type": "apiKey",
  "in": "header",
  "name": "edid",
  "description": "Selected login/account context from the JWT, not a database primary key. Required even for a JWT with one account."
}

Alternative 2

sessionCookieapiKey

Existing browser login session, with the same permission checks as Bearer authentication.

cookie: _edlogin

Security-Schema als JSON
{
  "type": "apiKey",
  "in": "cookie",
  "name": "_edlogin",
  "description": "Existing browser login session, with the same permission checks as Bearer authentication."
}
accountContextapiKey

Selected login/account context from the JWT, not a database primary key. Required even for a JWT with one account.

header: edid

Security-Schema als JSON
{
  "type": "apiKey",
  "in": "header",
  "name": "edid",
  "description": "Selected login/account context from the JWT, not a database primary key. Required even for a JWT with one account."
}

Berechtigungen

Resource permission mapping from APIPermissions(), Authfunc::_getCheckJWT. Additional model/admin/plugin checks may apply; resources absent from api_permission do not acquire a fictitious scope.

03

Parameter

Pfadparameter

iderforderlich

Öffentliche account-ID.

string

Öffentliche v2-ID aus dem ausgewählten Account; keine interne Datenbank-ID.

pattern
"^account_[a-f0-9]{12}_-?[0-9]+$"
Schema-Beispiel
"account_012345abcdef_123456"
Vollständiges Schema als JSON
{
  "type": "string",
  "pattern": "^account_[a-f0-9]{12}_-?[0-9]+$",
  "description": "Öffentliche v2-ID aus dem ausgewählten Account; keine interne Datenbank-ID.",
  "examples": [
    "account_012345abcdef_123456"
  ]
}

Header

languageoptional

Account language code, where the resource supports setLanguage().

string
Schema-Beispiel
"de"
Vollständiges Schema als JSON
{
  "type": "string",
  "examples": [
    "de"
  ]
}
X-Edoobox-If-Revisionoptional

Optional account mutation revision from a preceding authenticated auth-context snapshot. The dispatcher compares it while holding the account lock; mismatch409 requires a new review.

string
pattern
"^[a-f0-9]{32}$"
Schema-Beispiel
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Vollständiges Schema als JSON
{
  "type": "string",
  "pattern": "^[a-f0-9]{32}$",
  "examples": [
    "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
  ]
}
04

Request Body

erforderlich

application/json

object
data object erforderlich

Source-declared fields; action-specific and account validation still apply.

minProperties
1
id kein Wert zulässig
firstweekday Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: integer. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
1
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 44,
  "x-edoobox-canonicalType": "integer",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
format_date Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: integer. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
1
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 53,
  "x-edoobox-canonicalType": "integer",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
format_time Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: integer. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
1
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 62,
  "x-edoobox-canonicalType": "integer",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
format_calendar_grid Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: integer. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
1
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 71,
  "x-edoobox-canonicalType": "integer",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
format_timezone string

Existing IANA timezone name, for example Europe/Zurich; the update callback looks up zone_name.

Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settingsfunc.php",
      "line": 5,
      "reason": "PUT consumes a zone-name string instead of the integer get placeholder.",
      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f"
    },
    {
      "file": "application/models/v2/Settings.php",
      "line": 85,
      "reason": "Response returns the account timezone zone_name.",
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
congress_module kein Wert zulässig
format_number Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: integer. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
1
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 112,
  "x-edoobox-canonicalType": "integer",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
design string

Opaque edoobox v2 object ID returned by this account. Never send a raw database ID. The synthetic example is illustrative and is not a real record.

pattern
"^[a-z0-9]+_[a-f0-9]{12}_-?[0-9]+$"
Schema-Beispiel
"design_012345abcdef_123456"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 121
}
root_category kein Wert zulässig
shortcut kein Wert zulässig
organization_name Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 200. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 200,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 150
}
organization_contactperson Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 250. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 250,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 159
}
organization_street Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 120. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 120,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 168
}
organization_postcode Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 20. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 20,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 177
}
organization_town Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 200. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 200,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 186
}
organization_country kein Wert zulässig
organization_language Typ nicht eingeschränkt

Maps a configured language key to its internal language entry; unknown keys default internally. Response returns the configured language key or null for an unmatched legacy value. This is a language selector, not an externally exposed numeric ID.

Schema-Beispiel
"de"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "string"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 205,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/helpers/langedoobox_helper.php",
      "line": 731,
      "sha256": "6454b27d47a74f3cf236ef8e258fbe821228c1607165d00433a309b2e9127d3c",
      "reason": "edLangIDByName returns configured entry, with fallback for unknown names."
    },
    {
      "file": "application/helpers/langedoobox_helper.php",
      "line": 566,
      "sha256": "6454b27d47a74f3cf236ef8e258fbe821228c1607165d00433a309b2e9127d3c",
      "reason": "edLangById converts internal entries back to public language keys."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
organization_phone Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 120. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 120,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 214
}
organization_url Typ nicht eingeschränkt

Removes exact lowercase leading http:// or https:// before aP trim/newline/truncation to 250 stored characters. No URL syntax is required; other schemes and uppercase prefixes are not normalized in that step.

Schema-Beispiel
"https://example.invalid"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "string"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 223,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/helpers/edooboxhelp_helper.php",
      "line": 11560,
      "sha256": "090d351b5bde81813c7a829bedf2f1f9f978fce5765f246989779f996198934e",
      "reason": "aP text storage normalization."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
organization_email string

Trimmed input must pass PHP FILTER_VALIDATE_EMAIL. Native PUT rejects raw input over200 UTF-8 characters (including outer whitespace), escaped trimmed storage over200 characters, or any aP/aQ roundtrip change to the validated address. Rejection returns the existing invalid-email path before persistence; valid addresses are preserved.

Maximal gespeicherte Länge: 200. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

maxLength
200
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-validation": "PHP FILTER_VALIDATE_EMAIL after trim; raw UTF-8 length<=200; escaped trimmed length<=200; aQ(aP(trimmed,true,200))===trimmed",
  "x-edoobox-maxStoredLength": 200,
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settingsfunc.php",
      "line": 57,
      "reason": "PUT callback validates the trimmed email syntax, checks raw and encoded lengths, and requires an exact aP/aQ identity before returning storage. False is rejected by generic update as ED90100 before a write.",
      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
      "lineEnd": 75
    },
    {
      "file": "application/models/v2/Settings.php",
      "line": 237,
      "reason": "Incoming model getter is bounded to200 characters; generic PUT uses the dedicated validation hook; response unescapes stored text.",
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "lineEnd": 246
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
organization_currency kein Wert zulässig
billingaddress_organization Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 100. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 100,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 257
}
billingaddress_user Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 50. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 50,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 266
}
billingaddress_street Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 100. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 100,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 275
}
billingaddress_postcode_town Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 100. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 100,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 284
}
billingaddress_phone Typ nicht eingeschränkt

Trims the value then applies aP text normalization (trim/newline replacement/truncation to 250 stored characters). It does not validate telephone syntax. Some nonscalar values cause a PHP type error before aP.

Schema-Beispiel
"+41 00 000 00 00"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "string"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 293,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/helpers/edooboxhelp_helper.php",
      "line": 11560,
      "sha256": "090d351b5bde81813c7a829bedf2f1f9f978fce5765f246989779f996198934e",
      "reason": "Actual aP string-only/truncating storage normalization."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
billingaddress_email Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 250. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 250,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 303
}
billingaddress_status Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 312,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
user_duplicate_config Typ nicht eingeschränkt

Accepts a decoded object/array or a JSON-encoded string; non-array/invalid JSON becomes defaults. Known keys are normalized: booleans; candidate threshold clamped0..100; nullable auto-merge threshold1..100; max_merge_users2..10; newest/oldest strategy with default; recognized unique field rules with weights1..10. Explicit rules:[] clears rules. Unknown keys/rules are discarded; hash/version are computed server-side. Changing matching rules invalidates cached duplicate candidates, indexes and worker state.

Schema-Beispiel
{
  "enabled": true,
  "candidate_threshold": 60,
  "rules": []
}
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "object"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 321,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Userduplicatefunc.php",
      "line": 28,
      "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
      "reason": "Actual normalizeConfigForSave preserves unchanged rule hashes and normalizes current state."
    },
    {
      "file": "application/models/v2/Userduplicatefunc.php",
      "line": 40,
      "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
      "reason": "Full known config defaults, coercion, clamping, hash/version semantics."
    },
    {
      "file": "application/models/v2/Userduplicatefunc.php",
      "line": 648,
      "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
      "reason": "Rule filtering, uniqueness and weight normalization."
    },
    {
      "file": "application/models/v2/Userduplicatefunc.php",
      "line": 968,
      "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
      "reason": "Allowed public data-field selectors for duplicate matching."
    },
    {
      "file": "application/models/v2/Userduplicatefunc.php",
      "line": 488,
      "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
      "reason": "Changed matching rules invalidate derived duplicate data, not only the stored JSON."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
admin_avatar_mode Typ nicht eingeschränkt

String-casts the input; exact symbol selects symbol, every other value selects face. Unsupported values default rather than fail.

Schema-Beispiel
"symbol"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "enum": [
      "face",
      "symbol"
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 344,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
account_billing_recipient_type Typ nicht eingeschränkt

Strict recognized strings organization, billing_address and admin are stored; legacy email and every other value normalize to organization. This is a defaulting normalizer, not a rejecting input enum.

Schema-Beispiel
"organization"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "enum": [
      "organization",
      "billing_address",
      "admin"
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 363,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
account_billing_recipient_email Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 250. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 250,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 390
}
account_billing_recipient_admin_id Typ nicht eingeschränkt

Choose an account-owned administrator for billing. The exact clear sentinels null, false, 0, string 0 and the empty string normalize to no administrator. Positive database primary keys are rejected; numeric acceptance is confined to the literal clear sentinel 0.

3 Schema-Beispiele
"admin_012345abcdef_123456"
null
false
anyOf · Mindestens eine Variante muss passen
Variante 1 string

Canonical public admin v2 ID issued in this account; server validates the account-bound checksum and rejects raw IDs.

pattern
"^admin_[a-f0-9]{12}_(?:-35|[1-9][0-9]*)$"
Schema-Beispiel
"admin_012345abcdef_123456"
Variante 2 Typ nicht eingeschränkt
Erlaubte Werte
nullfalse0"0"""
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-id-kind": "empty-relation"
}
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 421,
      "reason": "The corrected inbound getter accepts a canonical tenant-bound admin v2 reference and normalizes explicit clear sentinels; positive raw primary keys are rejected.",
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
    },
    {
      "file": "application/models/v2/Settings.php",
      "line": 437,
      "reason": "The outbound setter encodes a positive database admin key as a public v2 ID and emits false for zero.",
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
    },
    {
      "file": "application/models/v2/API_DATA.php",
      "line": 1853,
      "reason": "Join updates call the field getter before persisting; response serialization calls the field setter at line1068. Final joined writer rejects strict-false getters and unresolved/multi-join metadata before writes, anchors the joined row to the own parent (including account-key parents), and preserves constant join.where constraints as additional AND predicates. Join-only writes verify the own existing parent. Generic simple-owner hard/soft DELETE now verifies the own existing parent before hooks and repeats FID in DML; missing optional hook data no longer warns. Read, insert, signed authority and GET-effect classifications are unchanged.",
      "sha256": "c0e15d26a7a4f3fb3c25e35557d4420ad395b2af3925caec292de08e32ebf44c"
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
account_billing_auto_charge_enabled Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 440,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
account_billing_topup_enabled Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 459,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
account_billing_topup_threshold Typ nicht eingeschränkt

Casts the input to PHP float and rounds to two decimal places. No positive minimum, currency range or rejecting numeric wire type is enforced by this getter.

Schema-Beispiel
25.5
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "number"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 478,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
account_billing_topup_amount Typ nicht eingeschränkt

Casts the input to PHP float and rounds to two decimal places. No positive minimum, currency range or rejecting numeric wire type is enforced by this getter.

Schema-Beispiel
25.5
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "number"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 497,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
internal_all Typ nicht eingeschränkt

Loose PHP comparison to true controls enable/disable. Enabling verifies the internal_function subscription feature; disabling bypasses that enablement check. Enable also regenerates the internal access code; disable clears it.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "boolean"
  },
  "x-edoobox-preconditions": [
    "An enabled subscription feature is an account-dependent runtime precondition, not an unconditional JSON requirement."
  ],
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 516,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Settingsfunc.php",
      "line": 23,
      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
      "reason": "Actual field hook handles loose truthiness and subscription verification."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
notification_minimummaximum Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 526,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
notification_booking Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 535,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
vat_included Typ nicht eingeschränkt

PHP loose comparison to exclusive stores 1, other values store 0. Response returns exclusive for stored 1 and including otherwise.

Schema-Beispiel
"including"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "enum": [
      "exclusive",
      "including"
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 544,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
vat_reverse_charge_texts Typ nicht eingeschränkt

An associative language-to-text array is filtered to configured language keys; values pass through aP. Non-array input and unknown keys produce/are removed into an empty JSON list. Readback JSON-decodes storage; malformed legacy JSON yields null.

Schema-Beispiel
{
  "de": "Example tax information"
}
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "object",
    "additionalProperties": {
      "type": "string"
    }
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 553,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/helpers/edooboxhelp_helper.php",
      "line": 11560,
      "sha256": "090d351b5bde81813c7a829bedf2f1f9f978fce5765f246989779f996198934e",
      "reason": "Each recognized text is normalized by aP."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
offer_sort Typ nicht eingeschränkt

PHP loose comparison to date selects date; every other input stores manuell. Readback maps the alternative to manual. Input and output spellings differ.

Schema-Beispiel
"date"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "enum": [
      "date",
      "manual"
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 580,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
offer_func_1 Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 589,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
offer_func_1_status Typ nicht eingeschränkt

PHP loose comparison to numeric 3 selects storage text 3, otherwise 4. Readback emits numeric 3 or 4.

Schema-Beispiel
3
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "enum": [
      3,
      4
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 598,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
offer_archiving Typ nicht eingeschränkt

Integer-casts the input, preserves modes 1/2/3 and maps all other values to 0. The output setter returns false for disabled.

Schema-Beispiel
0
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "enum": [
      0,
      1,
      2,
      3
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 607,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
offer_archiving_reference_date Typ nicht eingeschränkt

Exact string start selects start; every other value selects visibility. This is normalization, not a rejecting enum.

Schema-Beispiel
"visibility"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "enum": [
      "start",
      "visibility"
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 634,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
news_and_tricks Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 644,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_create_admin Typ nicht eingeschränkt

Integer-casts the input. Modes 1 and 2 remain selected; all other inputs normalize to disabled 0. Readback uses false for disabled.

Schema-Beispiel
1
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "enum": [
      0,
      1,
      2
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 653,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_userlogin Typ nicht eingeschränkt

PHP integer-casts the input; 2, 3 and 4 remain their numeric modes, other inputs become 1. The mode list describes normalized output, not a rejecting input enum.

Schema-Beispiel
1
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "enum": [
      1,
      2,
      3,
      4
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 686,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_login Typ nicht eingeschränkt

Integer-casts input: 2 stores y, 3 stores p, all other values store n. Response maps n/y/p to 1/2/3 and unmatched stored values to null.

Schema-Beispiel
1
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "enum": [
      1,
      2,
      3
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 713,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_login_global_users Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 738,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_cancellation Typ nicht eingeschränkt

PHP integer-casts the input; 2, 3 and 4 remain their numeric modes, other inputs become 1. The mode list describes normalized output, not a rejecting input enum.

Schema-Beispiel
1
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "enum": [
      1,
      2,
      3,
      4
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 757,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_cancellation_admin_confirmation_mail Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 784,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_reservation Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 803,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_paymentpage Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 812,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_sendinfo Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 822,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_label_notifications Typ nicht eingeschränkt

Non-array input becomes []. For each rule: trim a nonempty label of at most 15 characters, retain its first occurrence, require a PHP-valid email and a selected-account custom non-PDF email template. Invalid/duplicate entries are skipped, not a whole-field rejection. Storage uses internal template IDs only; response emits public emailtemplate v2 IDs.

Schema-Beispiel
[]
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "array",
    "items": {
      "type": "object",
      "required": [
        "label",
        "email",
        "emailtemplate"
      ],
      "properties": {
        "label": {
          "type": "string",
          "minLength": 1,
          "maxLength": 15
        },
        "email": {
          "type": "string"
        },
        "emailtemplate": {
          "type": "string",
          "pattern": "^emailtemplate_[a-f0-9]{12}_-?[0-9]+$"
        }
      },
      "additionalProperties": false
    }
  },
  "x-edoobox-preconditions": [
    "The referenced template must already exist for this account; empty [] is a valid disabling input."
  ],
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 831,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Settings.php",
      "line": 3060,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Actual rule filtering and per-account template lookup."
    },
    {
      "file": "application/models/v2/Settings.php",
      "line": 3105,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Response filter emits typed public emailtemplate IDs."
    },
    {
      "file": "application/models/v2/Settings.php",
      "line": 3159,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Template must belong to the account and be an email template, not PDF."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_send_pdf Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 850,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_send_ics Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 859,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_reminder Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 878,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_reminder_hours Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: integer. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
1
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 887,
  "x-edoobox-canonicalType": "integer",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_visitconfirmation Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 902,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_number Typ nicht eingeschränkt

The hook integer-casts the supplied value, rejects results outside 1..999999999, and rejects an already-used booking number in the selected account. A successful update stores the counter; coercible text is accepted, so a rejecting integer wire type would be inaccurate.

Schema-Beispiel
100001
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "integer",
    "minimum": 1,
    "maximum": 999999999
  },
  "x-edoobox-preconditions": [
    "The chosen number must not already occur in the selected account."
  ],
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 937,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Settingsfunc.php",
      "line": 288,
      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
      "reason": "Actual hook range check and tenant-scoped uniqueness query."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_cert_percent Typ nicht eingeschränkt

Integer-casts then clamps to 0 through 100. Out-of-range/coercible input is normalized instead of rejected. The response setter integer-casts stored rows; malformed legacy rows are not clamped on read.

Schema-Beispiel
50
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "integer",
    "minimum": 0,
    "maximum": 100
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 948,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_cert_notvisitmail Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 975,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_cert_senddelayhours Typ nicht eingeschränkt

Integer-casts then clamps to 0 through 1440. Out-of-range/coercible input is normalized instead of rejected. The response setter integer-casts stored rows; malformed legacy rows are not clamped on read.

Schema-Beispiel
50
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "integer",
    "minimum": 0,
    "maximum": 1440
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 996,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_cert_validation_url Typ nicht eingeschränkt

Loose PHP comparison to true controls enable/disable. Enabling verifies the certificate_validation subscription feature; disabling bypasses that enablement check. Writes the certificate-validation flag.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "boolean"
  },
  "x-edoobox-preconditions": [
    "An enabled subscription feature is an account-dependent runtime precondition, not an unconditional JSON requirement."
  ],
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1024,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Settingsfunc.php",
      "line": 40,
      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
      "reason": "Actual field hook handles loose truthiness and subscription verification."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_cert_attachpdf Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1046,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_cert_attachpdfpercent Typ nicht eingeschränkt

Integer-casts then clamps to 0 through 100. Out-of-range/coercible input is normalized instead of rejected. The response setter integer-casts stored rows; malformed legacy rows are not clamped on read.

Schema-Beispiel
50
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "integer",
    "minimum": 0,
    "maximum": 100
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1206,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_cert_secondemail Typ nicht eingeschränkt

Getter maps PHP truthiness to integer enable/disable. Disabling always updates the flag. Enabling requires an existing stored destination field, or a supplied recognized booking_cert_secondemail_field public field key. A missing/unrecognized destination returns false from the hook. The companion field is conditionally required based on stored account state, not on every request.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "boolean"
  },
  "x-edoobox-preconditions": [
    "When no destination is stored, enabling requires booking_cert_secondemail_field in the same data object."
  ],
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1094,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Settingsfunc.php",
      "line": 641,
      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
      "reason": "Actual conditional second-email flag hook; getter called explicitly and destination checked against stored settings."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_cert_secondemail_field Typ nicht eingeschränkt

A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. An unknown scalar key clears it; readback is false when empty, a public key when recognized, and null for unmatched legacy columns. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.

Schema-Beispiel
"email"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "anyOf": [
      {
        "type": "string",
        "enum": [
          "status",
          "gender",
          "first_name",
          "last_name",
          "street",
          "postcode",
          "location",
          "country",
          "language",
          "phone_number",
          "email",
          "company",
          "data_1",
          "data_2",
          "data_3",
          "data_4",
          "data_5",
          "data_6",
          "data_7",
          "data_8",
          "data_9",
          "data_10",
          "data_11",
          "data_12",
          "data_13",
          "data_14",
          "data_15",
          "data_16",
          "data_17",
          "data_18",
          "data_19",
          "data_20",
          "data_21",
          "data_22",
          "data_23",
          "data_24",
          "data_25",
          "data_26",
          "data_27",
          "data_28",
          "data_29",
          "data_30"
        ]
      },
      {
        "const": false
      }
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1115,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Datastructure.php",
      "line": 20,
      "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
      "reason": "Public field-key to storage-column map; this selector is not a database record ID."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_secondemail Typ nicht eingeschränkt

Getter maps PHP truthiness to integer enable/disable. Disabling always updates the flag. Enabling requires an existing stored destination field, or a supplied recognized booking_secondemail_field public field key. A missing/unrecognized destination returns false from the hook. The companion field is conditionally required based on stored account state, not on every request.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "boolean"
  },
  "x-edoobox-preconditions": [
    "When no destination is stored, enabling requires booking_secondemail_field in the same data object."
  ],
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1150,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Settingsfunc.php",
      "line": 693,
      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
      "reason": "Actual conditional second-email flag hook; getter called explicitly and destination checked against stored settings."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_secondemail_field Typ nicht eingeschränkt

A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. An unknown scalar key clears it; readback is false when empty, a public key when recognized, and null for unmatched legacy columns. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.

Schema-Beispiel
"email"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "anyOf": [
      {
        "type": "string",
        "enum": [
          "status",
          "gender",
          "first_name",
          "last_name",
          "street",
          "postcode",
          "location",
          "country",
          "language",
          "phone_number",
          "email",
          "company",
          "data_1",
          "data_2",
          "data_3",
          "data_4",
          "data_5",
          "data_6",
          "data_7",
          "data_8",
          "data_9",
          "data_10",
          "data_11",
          "data_12",
          "data_13",
          "data_14",
          "data_15",
          "data_16",
          "data_17",
          "data_18",
          "data_19",
          "data_20",
          "data_21",
          "data_22",
          "data_23",
          "data_24",
          "data_25",
          "data_26",
          "data_27",
          "data_28",
          "data_29",
          "data_30"
        ]
      },
      {
        "const": false
      }
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1171,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Datastructure.php",
      "line": 20,
      "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
      "reason": "Public field-key to storage-column map; this selector is not a database record ID."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_offerlist_secondemail_field Typ nicht eingeschränkt

A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. An unknown scalar key clears it; readback is false when empty, a public key when recognized, and null for unmatched legacy columns. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.

Schema-Beispiel
"email"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "anyOf": [
      {
        "type": "string",
        "enum": [
          "status",
          "gender",
          "first_name",
          "last_name",
          "street",
          "postcode",
          "location",
          "country",
          "language",
          "phone_number",
          "email",
          "company",
          "data_1",
          "data_2",
          "data_3",
          "data_4",
          "data_5",
          "data_6",
          "data_7",
          "data_8",
          "data_9",
          "data_10",
          "data_11",
          "data_12",
          "data_13",
          "data_14",
          "data_15",
          "data_16",
          "data_17",
          "data_18",
          "data_19",
          "data_20",
          "data_21",
          "data_22",
          "data_23",
          "data_24",
          "data_25",
          "data_26",
          "data_27",
          "data_28",
          "data_29",
          "data_30"
        ]
      },
      {
        "const": false
      }
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1233,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Datastructure.php",
      "line": 20,
      "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
      "reason": "Public field-key to storage-column map; this selector is not a database record ID."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
booking_offerlist_cancel_mail Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1268,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_allow_promotions Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1288,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
booking_designation_promotions Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 50. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 50,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 1297
}
skip_counter kein Wert zulässig
question_deliverables_show kein Wert zulässig
multi_offer_show kein Wert zulässig
multi_offer_child_limit kein Wert zulässig
automatic_deletion Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: integer. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
1
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1367,
  "x-edoobox-canonicalType": "integer",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
edsupport_access Typ nicht eingeschränkt

true or string true becomes 1; false, string false, null and empty string become 0; otherwise positive integer-cast values are retained, nonpositive values become 0. The getter does not reject noncanonical types.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "anyOf": [
      {
        "type": "boolean"
      },
      {
        "type": "integer",
        "minimum": 0
      }
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1395,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
payment_confirmation_mail Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1428,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
barcode_type Typ nicht eingeschränkt

Switch default normalizes other input values; case labels are not an exhaustive accepted-input enum.

Schema-Beispiel
"pdf417"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-knownInputs": [
    "pdf417",
    "qrcode",
    "datamatrix"
  ],
  "x-edoobox-normalization": "Switch default normalizes other input values; case labels are not an exhaustive accepted-input enum.",
  "x-edoobox-sourceLine": 1437
}
barcode_mobile_wallet Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1461,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
mobile_wallet_background_color Typ nicht eingeschränkt

Trims/string-casts; six hexadecimal digits with optional # normalize to uppercase #RRGGBB. Empty or malformed values become '#0068B0'. No rejecting input pattern is applied.

Schema-Beispiel
"#12ab34"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "string"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1470,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Settings.php",
      "line": 3181,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Shared color normalizer returns uppercase hex or the field-specific fallback."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
mobile_wallet_foreground_color Typ nicht eingeschränkt

Trims/string-casts; six hexadecimal digits with optional # normalize to uppercase #RRGGBB. Empty or malformed values become ''. No rejecting input pattern is applied.

Schema-Beispiel
"#12ab34"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "string"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1479,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Settings.php",
      "line": 3181,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Shared color normalizer returns uppercase hex or the field-specific fallback."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
mobile_wallet_use_offer_image Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1488,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
mobile_wallet_fallback_image_url Typ nicht eingeschränkt

String-casts, strips HTML tags, trims and byte-truncates to 500 bytes. Despite the field name, no URL syntax or scheme validator is applied.

Schema-Beispiel
"https://example.invalid/support"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "string"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1497,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
mobile_wallet_display_name Typ nicht eingeschränkt

String-casts, strips HTML tags, trims and byte-truncates to 150 bytes. The response setter only string-casts stored data.

Schema-Beispiel
"Example organization"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "string"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1506,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
mobile_wallet_support_url Typ nicht eingeschränkt

String-casts, strips HTML tags, trims and byte-truncates to 500 bytes. Despite the field name, no URL syntax or scheme validator is applied.

Schema-Beispiel
"https://example.invalid/support"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "string"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1515,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
barcode_ticket Typ nicht eingeschränkt

Switch default normalizes other input values; case labels are not an exhaustive accepted-input enum.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-knownInputs": [
    false,
    "always",
    "offer"
  ],
  "x-edoobox-normalization": "Switch default normalizes other input values; case labels are not an exhaustive accepted-input enum.",
  "x-edoobox-sourceLine": 1524
}
collective_booking_max Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: integer. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
1
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1548,
  "x-edoobox-canonicalType": "integer",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
collective_booking_identify Typ nicht eingeschränkt

A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. Unknown keys return null; readback is false when empty, a public key when recognized, and null for unmatched legacy columns. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.

Schema-Beispiel
"email"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "anyOf": [
      {
        "type": "string",
        "enum": [
          "status",
          "gender",
          "first_name",
          "last_name",
          "street",
          "postcode",
          "location",
          "country",
          "language",
          "phone_number",
          "email",
          "company",
          "data_1",
          "data_2",
          "data_3",
          "data_4",
          "data_5",
          "data_6",
          "data_7",
          "data_8",
          "data_9",
          "data_10",
          "data_11",
          "data_12",
          "data_13",
          "data_14",
          "data_15",
          "data_16",
          "data_17",
          "data_18",
          "data_19",
          "data_20",
          "data_21",
          "data_22",
          "data_23",
          "data_24",
          "data_25",
          "data_26",
          "data_27",
          "data_28",
          "data_29",
          "data_30"
        ]
      },
      {
        "const": false
      }
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1563,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Datastructure.php",
      "line": 20,
      "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
      "reason": "Public field-key to storage-column map; this selector is not a database record ID."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
collective_booking_identify_privacy Typ nicht eingeschränkt

A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. The clear sentinel is stored as NO; unknown keys store empty text. Readback is false for NO, a public key when recognized, and null otherwise. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.

Schema-Beispiel
"email"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "anyOf": [
      {
        "type": "string",
        "enum": [
          "status",
          "gender",
          "first_name",
          "last_name",
          "street",
          "postcode",
          "location",
          "country",
          "language",
          "phone_number",
          "email",
          "company",
          "data_1",
          "data_2",
          "data_3",
          "data_4",
          "data_5",
          "data_6",
          "data_7",
          "data_8",
          "data_9",
          "data_10",
          "data_11",
          "data_12",
          "data_13",
          "data_14",
          "data_15",
          "data_16",
          "data_17",
          "data_18",
          "data_19",
          "data_20",
          "data_21",
          "data_22",
          "data_23",
          "data_24",
          "data_25",
          "data_26",
          "data_27",
          "data_28",
          "data_29",
          "data_30"
        ]
      },
      {
        "const": false
      }
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1586,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/Datastructure.php",
      "line": 20,
      "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
      "reason": "Public field-key to storage-column map; this selector is not a database record ID."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
collective_booking_identify_obligatory Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1610,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
collective_booking_master Typ nicht eingeschränkt

Switch default normalizes other input values; case labels are not an exhaustive accepted-input enum.

Schema-Beispiel
"manual"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-knownInputs": [
    "manual",
    "all",
    false
  ],
  "x-edoobox-normalization": "Switch default normalizes other input values; case labels are not an exhaustive accepted-input enum.",
  "x-edoobox-sourceLine": 1673
}
security_headers_csp Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1654,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
design_subcategory Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1699,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
legaltext_atc Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1708,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
legaltext_ri Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1717,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
legaltext_pp Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1726,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
attendance_config array

The converted statuses 0, 1 and 2 must each occur exactly once among processed items. Counter values outside 0..100 become 0. Extra statuses are supported; processing stops after 41 entries or on a missing status.

Array-Elemente
object
status number | string erforderlich

Converted to integer by the callback.

order number | string
counter Typ nicht eingeschränkt
val Typ nicht eingeschränkt
color Typ nicht eingeschränkt
help Typ nicht eingeschränkt

Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.

Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settingsfunc.php",
      "line": 153,
      "reason": "PUT sorts the status-record array, casts status/order and normalizes counter.",
      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f"
    },
    {
      "file": "application/models/v2/Settingsfunc.php",
      "line": 208,
      "reason": "Exactly three required-status occurrences are checked.",
      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f"
    },
    {
      "file": "application/models/v2/Settings.php",
      "line": 1739,
      "reason": "Response returns ordered status records as a JSON array.",
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
language object

Active language codes in desired order. Unknown codes are ignored. Account language configuration governs availability.

active array erforderlich
Array-Elemente
string

Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.

Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settingsfunc.php",
      "line": 77,
      "reason": "PUT expects an active language-code array inside an object.",
      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f"
    },
    {
      "file": "application/models/v2/Settings.php",
      "line": 1759,
      "reason": "The resource Structure response placeholder is false; enriched action responses may differ.",
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
edsubscription kein Wert zulässig
edsubscription_testinguntildate kein Wert zulässig
versions kein Wert zulässig
pdf_engine Typ nicht eingeschränkt

PHP switch maps input mode 1 to dompdf; mode 2 and other inputs default to mpdf. Readback maps stored dompdf/mpdf to numeric 1/2, with null for unknown stored text.

Schema-Beispiel
2
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "enum": [
      1,
      2
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1821,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
pdf_edit_restriction_password Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 1851,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
pdf_paper_size string

Requires an exact installed library paper-size key after case folding, before aP trim/storage normalization. Unknown values return strict false from the getter and the final generic joined writer rejects ED80100 before joined persistence. The existing case-insensitive pattern reflects those installed meaningful paper-size strings; the own parent and relation predicates remain independently checked.

pattern
"^(?:4[aA]0|2[aA]0|[aA]0|[aA]1|[aA]2|[aA]3|[aA]4|[aA]5|[aA]6|[aA]7|[aA]8|[aA]9|[aA]10|[bB]0|[bB]1|[bB]2|[bB]3|[bB]4|[bB]5|[bB]6|[bB]7|[bB]8|[bB]9|[bB]10|[cC]0|[cC]1|[cC]2|[cC]3|[cC]4|[cC]5|[cC]6|[cC]7|[cC]8|[cC]9|[cC]10|[rR][aA]0|[rR][aA]1|[rR][aA]2|[rR][aA]3|[rR][aA]4|[sS][rR][aA]0|[sS][rR][aA]1|[sS][rR][aA]2|[sS][rR][aA]3|[sS][rR][aA]4|[lL][eE][tT][tT][eE][rR]|[hH][aA][lL][fF]\\-[lL][eE][tT][tT][eE][rR]|[lL][eE][gG][aA][lL]|[lL][eE][dD][gG][eE][rR]|[tT][aA][bB][lL][oO][iI][dD]|[eE][xX][eE][cC][uU][tT][iI][vV][eE]|[fF][oO][lL][iI][oO]|[cC][oO][mM][mM][eE][rR][cC][iI][aA][lL]\\ \\#10\\ [eE][nN][vV][eE][lL][oO][pP][eE]|[cC][aA][tT][aA][lL][oO][gG]\\ \\#10\\ 1/2\\ [eE][nN][vV][eE][lL][oO][pP][eE]|8\\.5[xX]11|8\\.5[xX]14|11[xX]17)$"
Schema-Beispiel
"a4"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-validation",
  "x-edoobox-canonicalSchema": {
    "enum": [
      "4a0",
      "2a0",
      "a0",
      "a1",
      "a2",
      "a3",
      "a4",
      "a5",
      "a6",
      "a7",
      "a8",
      "a9",
      "a10",
      "b0",
      "b1",
      "b2",
      "b3",
      "b4",
      "b5",
      "b6",
      "b7",
      "b8",
      "b9",
      "b10",
      "c0",
      "c1",
      "c2",
      "c3",
      "c4",
      "c5",
      "c6",
      "c7",
      "c8",
      "c9",
      "c10",
      "ra0",
      "ra1",
      "ra2",
      "ra3",
      "ra4",
      "sra0",
      "sra1",
      "sra2",
      "sra3",
      "sra4",
      "letter",
      "half-letter",
      "legal",
      "ledger",
      "tabloid",
      "executive",
      "folio",
      "commercial #10 envelope",
      "catalog #10 1/2 envelope",
      "8.5x11",
      "8.5x14",
      "11x17"
    ]
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1870,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "vendor/dompdf/dompdf/src/Adapter/CPDF.php",
      "line": 42,
      "sha256": "7dca4a096b08c006f12bfccd733068223d92e502b9a625c49bd919373f714001",
      "reason": "Installed Dompdf paper-size key list, matched case-insensitively by the source getter."
    },
    {
      "file": "application/models/v2/API_DATA.php",
      "line": 1853,
      "sha256": "c0e15d26a7a4f3fb3c25e35557d4420ad395b2af3925caec292de08e32ebf44c",
      "reason": "Normal fields check strict false; joined fields instead collect getter output at 1793 and execute it at 1827 without that rejection. Final joined writer rejects strict-false getters and unresolved/multi-join metadata before writes, anchors the joined row to the own parent (including account-key parents), and preserves constant join.where constraints as additional AND predicates. Join-only writes verify the own existing parent. Generic simple-owner hard/soft DELETE now verifies the own existing parent before hooks and repeats FID in DML; missing optional hook data no longer warns. Read, insert, signed authority and GET-effect classifications are unchanged."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
pdf_custom_css Typ nicht eingeschränkt

Parses CSS, removes non-declaration blocks, keeps selectors starting .custom_ or *, and filters rule value node classes. font-family is retained only when a family is among Pdf::$fonts. Stores compact CSS base64; readback decodes/formats it or returns empty text. Parser errors and PDF renderer prerequisites are not a closed JSON Schema grammar.

Schema-Beispiel
".custom_example { color: #123456; }"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "string"
  },
  "x-edoobox-preconditions": [
    "CSS parser grammar and configured font support are checked by source/parser, not replicated as a misleading JSON pattern."
  ],
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1892,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/libraries/edoobox/integrations/pdf/Pdf.php",
      "line": 16,
      "sha256": "b286cdc4d20e02601db9acc35b06564357f10378961e72cb8f4e22e64b3a3254",
      "reason": "Allowed PDF font keys used by the CSS normalizer."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
dinaco_client_id Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 250. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 250,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 1960
}
dinaco_client_secret Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 250. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 250,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 1979
}
gtm_mess_id Typ nicht eingeschränkt

For input longer than five bytes, a non-anchored G-[a-zA-z0-9]{5,20} substring must occur or the value becomes empty. Short values are retained. aP then trims, replaces newlines and truncates. This is not a strict GA4-ID pattern validator.

Schema-Beispiel
"G-EXAMPLE1234"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "string"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 1998,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/helpers/edooboxhelp_helper.php",
      "line": 11560,
      "sha256": "090d351b5bde81813c7a829bedf2f1f9f978fce5765f246989779f996198934e",
      "reason": "aP normalization after the substring test."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
gtm_container_id Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: string. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

Maximal gespeicherte Länge: 250. Diese Speichergrenze ist keine maxLength-Validierung der Eingabe.

The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.

Schema-Beispiel
"Example"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-canonicalType": "string",
  "x-edoobox-maxStoredLength": 250,
  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
  "x-edoobox-sourceLine": 2024
}
meta_html Typ nicht eingeschränkt

Parses supplied HTML and keeps only meta tags whose name is google-site-verification or facebook-domain-verification. Only their name/content attributes are serialized, then aP truncates to 250 stored characters. This is a lossy sanitizer, not a rejecting HTML schema.

Schema-Beispiel
"<meta name=\"google-site-verification\" content=\"synthetic-verification\">"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-normalization",
  "x-edoobox-canonicalSchema": {
    "type": "string"
  },
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 2044,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
system_attachments_file_naming object

Map keyed by an emailtemplate public ID or ics. Each value maps language codes to file-name text. Filename characters and suffix are normalized; unknown templates/languages are ignored.

Schema für zusätzliche Felder
object
Schema für zusätzliche Felder
string
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 2076,
      "reason": "Input iterates template/ics keys and language-to-name objects; edid occurs on map keys.",
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
    },
    {
      "file": "application/models/v2/Settings.php",
      "line": 2106,
      "reason": "Response maps stored keys back to public emailtemplate IDs or ics.",
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
website_integration Typ nicht eingeschränkt
Erlaubte Werte
"iframe""wordpress"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-sourceLine": 2132
}
website_url string

Accepts empty string or a string accepted by PHP FILTER_VALIDATE_URL. Other values return strict false and API_DATA rejects the update. No restriction to HTTP/HTTPS is imposed by this getter.

Schema-Beispiel
"https://example.invalid"
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-reviewed-validation",
  "x-edoobox-canonicalSchema": {
    "type": "string"
  },
  "x-edoobox-preconditions": [
    "PHP FILTER_VALIDATE_URL is the rejecting syntax check; JSON Schema format:uri is not asserted as an exact equivalent."
  ],
  "x-edoobox-contractSource": [
    {
      "file": "application/models/v2/Settings.php",
      "line": 2159,
      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
      "reason": "Structure input getter, response setter and update flags."
    },
    {
      "file": "application/models/v2/API_DATA.php",
      "line": 1853,
      "sha256": "c0e15d26a7a4f3fb3c25e35557d4420ad395b2af3925caec292de08e32ebf44c",
      "reason": "Strict false getter rejects invalid URL inputs. Final joined writer rejects strict-false getters and unresolved/multi-join metadata before writes, anchors the joined row to the own parent (including account-key parents), and preserves constant join.where constraints as additional AND predicates. Join-only writes verify the own existing parent. Generic simple-owner hard/soft DELETE now verifies the own existing parent before hooks and repeats FID in DML; missing optional hook data no longer warns. Read, insert, signed authority and GET-effect classifications are unchanged."
    },
    {
      "file": "docs/openapi/reviews/settings-fields.json",
      "line": 1,
      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
    }
  ]
}
admin_custom_permissions Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 2172,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}
admin_academic_title_use Typ nicht eingeschränkt

Kanonischer Typ nach Normalisierung: boolean. Dies ist keine zusätzliche Einschränkung des Eingabetyps.

PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.

Schema-Beispiel
false
Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-schemaStatus": "source-inferred",
  "x-edoobox-sourceLine": 2192,
  "x-edoobox-canonicalType": "boolean",
  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction."
}

Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.

Feld-Metadaten aus der Spezifikation
{
  "x-edoobox-readOnlyFields": [
    "id",
    "congress_module",
    "root_category",
    "shortcut",
    "organization_country",
    "organization_currency",
    "skip_counter",
    "question_deliverables_show",
    "multi_offer_show",
    "multi_offer_child_limit",
    "edsubscription",
    "edsubscription_testinguntildate",
    "versions"
  ],
  "x-edoobox-clientRestriction": "Read-only fields are forbidden by this client contract to prevent silently ignored writes; the legacy API itself skips them. Explicit source-marked update context fields remain accepted for hook validation without changing their immutable database columns."
}
id string

Opaque edoobox v2 object ID returned by this account. Never send a raw database ID. The synthetic example is illustrative and is not a real record.

pattern
"^[a-z0-9]+_[a-f0-9]{12}_-?[0-9]+$"
Schema-Beispiel
"settings_012345abcdef_123456"

Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.

Vollständiges Schema als JSON
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "id": false,
        "firstweekday": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 44,
          "x-edoobox-canonicalType": "integer",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            1
          ]
        },
        "format_date": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 53,
          "x-edoobox-canonicalType": "integer",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            1
          ]
        },
        "format_time": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 62,
          "x-edoobox-canonicalType": "integer",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            1
          ]
        },
        "format_calendar_grid": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 71,
          "x-edoobox-canonicalType": "integer",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            1
          ]
        },
        "format_timezone": {
          "type": "string",
          "description": "Existing IANA timezone name, for example Europe/Zurich; the update callback looks up zone_name.",
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settingsfunc.php",
              "line": 5,
              "reason": "PUT consumes a zone-name string instead of the integer get placeholder.",
              "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f"
            },
            {
              "file": "application/models/v2/Settings.php",
              "line": 85,
              "reason": "Response returns the account timezone zone_name.",
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "congress_module": false,
        "format_number": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 112,
          "x-edoobox-canonicalType": "integer",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            1
          ]
        },
        "design": {
          "type": "string",
          "pattern": "^[a-z0-9]+_[a-f0-9]{12}_-?[0-9]+$",
          "description": "Opaque edoobox v2 object ID returned by this account. Never send a raw database ID. The synthetic example is illustrative and is not a real record.",
          "examples": [
            "design_012345abcdef_123456"
          ],
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 121
        },
        "root_category": false,
        "shortcut": false,
        "organization_name": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 200,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 150
        },
        "organization_contactperson": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 250,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 159
        },
        "organization_street": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 120,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 168
        },
        "organization_postcode": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 20,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 177
        },
        "organization_town": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 200,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 186
        },
        "organization_country": false,
        "organization_language": {
          "description": "Maps a configured language key to its internal language entry; unknown keys default internally. Response returns the configured language key or null for an unmatched legacy value. This is a language selector, not an externally exposed numeric ID.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "de"
          ],
          "x-edoobox-canonicalSchema": {
            "type": "string"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 205,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/helpers/langedoobox_helper.php",
              "line": 731,
              "sha256": "6454b27d47a74f3cf236ef8e258fbe821228c1607165d00433a309b2e9127d3c",
              "reason": "edLangIDByName returns configured entry, with fallback for unknown names."
            },
            {
              "file": "application/helpers/langedoobox_helper.php",
              "line": 566,
              "sha256": "6454b27d47a74f3cf236ef8e258fbe821228c1607165d00433a309b2e9127d3c",
              "reason": "edLangById converts internal entries back to public language keys."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "organization_phone": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 120,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 214
        },
        "organization_url": {
          "description": "Removes exact lowercase leading http:// or https:// before aP trim/newline/truncation to 250 stored characters. No URL syntax is required; other schemes and uppercase prefixes are not normalized in that step.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "https://example.invalid"
          ],
          "x-edoobox-canonicalSchema": {
            "type": "string"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 223,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/helpers/edooboxhelp_helper.php",
              "line": 11560,
              "sha256": "090d351b5bde81813c7a829bedf2f1f9f978fce5765f246989779f996198934e",
              "reason": "aP text storage normalization."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "organization_email": {
          "type": "string",
          "maxLength": 200,
          "description": "Trimmed input must pass PHP FILTER_VALIDATE_EMAIL. Native PUT rejects raw input over200 UTF-8 characters (including outer whitespace), escaped trimmed storage over200 characters, or any aP/aQ roundtrip change to the validated address. Rejection returns the existing invalid-email path before persistence; valid addresses are preserved.",
          "x-edoobox-validation": "PHP FILTER_VALIDATE_EMAIL after trim; raw UTF-8 length<=200; escaped trimmed length<=200; aQ(aP(trimmed,true,200))===trimmed",
          "x-edoobox-maxStoredLength": 200,
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settingsfunc.php",
              "line": 57,
              "reason": "PUT callback validates the trimmed email syntax, checks raw and encoded lengths, and requires an exact aP/aQ identity before returning storage. False is rejected by generic update as ED90100 before a write.",
              "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
              "lineEnd": 75
            },
            {
              "file": "application/models/v2/Settings.php",
              "line": 237,
              "reason": "Incoming model getter is bounded to200 characters; generic PUT uses the dedicated validation hook; response unescapes stored text.",
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "lineEnd": 246
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "organization_currency": false,
        "billingaddress_organization": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 100,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 257
        },
        "billingaddress_user": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 50,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 266
        },
        "billingaddress_street": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 100,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 275
        },
        "billingaddress_postcode_town": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 100,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 284
        },
        "billingaddress_phone": {
          "description": "Trims the value then applies aP text normalization (trim/newline replacement/truncation to 250 stored characters). It does not validate telephone syntax. Some nonscalar values cause a PHP type error before aP.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "+41 00 000 00 00"
          ],
          "x-edoobox-canonicalSchema": {
            "type": "string"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 293,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/helpers/edooboxhelp_helper.php",
              "line": 11560,
              "sha256": "090d351b5bde81813c7a829bedf2f1f9f978fce5765f246989779f996198934e",
              "reason": "Actual aP string-only/truncating storage normalization."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "billingaddress_email": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 250,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 303
        },
        "billingaddress_status": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 312,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "user_duplicate_config": {
          "description": "Accepts a decoded object/array or a JSON-encoded string; non-array/invalid JSON becomes defaults. Known keys are normalized: booleans; candidate threshold clamped0..100; nullable auto-merge threshold1..100; max_merge_users2..10; newest/oldest strategy with default; recognized unique field rules with weights1..10. Explicit rules:[] clears rules. Unknown keys/rules are discarded; hash/version are computed server-side. Changing matching rules invalidates cached duplicate candidates, indexes and worker state.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            {
              "enabled": true,
              "candidate_threshold": 60,
              "rules": []
            }
          ],
          "x-edoobox-canonicalSchema": {
            "type": "object"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 321,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Userduplicatefunc.php",
              "line": 28,
              "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
              "reason": "Actual normalizeConfigForSave preserves unchanged rule hashes and normalizes current state."
            },
            {
              "file": "application/models/v2/Userduplicatefunc.php",
              "line": 40,
              "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
              "reason": "Full known config defaults, coercion, clamping, hash/version semantics."
            },
            {
              "file": "application/models/v2/Userduplicatefunc.php",
              "line": 648,
              "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
              "reason": "Rule filtering, uniqueness and weight normalization."
            },
            {
              "file": "application/models/v2/Userduplicatefunc.php",
              "line": 968,
              "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
              "reason": "Allowed public data-field selectors for duplicate matching."
            },
            {
              "file": "application/models/v2/Userduplicatefunc.php",
              "line": 488,
              "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
              "reason": "Changed matching rules invalidate derived duplicate data, not only the stored JSON."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "admin_avatar_mode": {
          "description": "String-casts the input; exact symbol selects symbol, every other value selects face. Unsupported values default rather than fail.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "symbol"
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              "face",
              "symbol"
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 344,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "account_billing_recipient_type": {
          "description": "Strict recognized strings organization, billing_address and admin are stored; legacy email and every other value normalize to organization. This is a defaulting normalizer, not a rejecting input enum.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "organization"
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              "organization",
              "billing_address",
              "admin"
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 363,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "account_billing_recipient_email": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 250,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 390
        },
        "account_billing_recipient_admin_id": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^admin_[a-f0-9]{12}_(?:-35|[1-9][0-9]*)$",
              "examples": [
                "admin_012345abcdef_123456"
              ],
              "description": "Canonical public admin v2 ID issued in this account; server validates the account-bound checksum and rejects raw IDs."
            },
            {
              "enum": [
                null,
                false,
                0,
                "0",
                ""
              ],
              "x-edoobox-id-kind": "empty-relation"
            }
          ],
          "examples": [
            "admin_012345abcdef_123456",
            null,
            false
          ],
          "description": "Choose an account-owned administrator for billing. The exact clear sentinels null, false, 0, string 0 and the empty string normalize to no administrator. Positive database primary keys are rejected; numeric acceptance is confined to the literal clear sentinel 0.",
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 421,
              "reason": "The corrected inbound getter accepts a canonical tenant-bound admin v2 reference and normalizes explicit clear sentinels; positive raw primary keys are rejected.",
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
            },
            {
              "file": "application/models/v2/Settings.php",
              "line": 437,
              "reason": "The outbound setter encodes a positive database admin key as a public v2 ID and emits false for zero.",
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
            },
            {
              "file": "application/models/v2/API_DATA.php",
              "line": 1853,
              "reason": "Join updates call the field getter before persisting; response serialization calls the field setter at line1068. Final joined writer rejects strict-false getters and unresolved/multi-join metadata before writes, anchors the joined row to the own parent (including account-key parents), and preserves constant join.where constraints as additional AND predicates. Join-only writes verify the own existing parent. Generic simple-owner hard/soft DELETE now verifies the own existing parent before hooks and repeats FID in DML; missing optional hook data no longer warns. Read, insert, signed authority and GET-effect classifications are unchanged.",
              "sha256": "c0e15d26a7a4f3fb3c25e35557d4420ad395b2af3925caec292de08e32ebf44c"
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "account_billing_auto_charge_enabled": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 440,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "account_billing_topup_enabled": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 459,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "account_billing_topup_threshold": {
          "description": "Casts the input to PHP float and rounds to two decimal places. No positive minimum, currency range or rejecting numeric wire type is enforced by this getter.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            25.5
          ],
          "x-edoobox-canonicalSchema": {
            "type": "number"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 478,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "account_billing_topup_amount": {
          "description": "Casts the input to PHP float and rounds to two decimal places. No positive minimum, currency range or rejecting numeric wire type is enforced by this getter.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            25.5
          ],
          "x-edoobox-canonicalSchema": {
            "type": "number"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 497,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "internal_all": {
          "description": "Loose PHP comparison to true controls enable/disable. Enabling verifies the internal_function subscription feature; disabling bypasses that enablement check. Enable also regenerates the internal access code; disable clears it.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            false
          ],
          "x-edoobox-canonicalSchema": {
            "type": "boolean"
          },
          "x-edoobox-preconditions": [
            "An enabled subscription feature is an account-dependent runtime precondition, not an unconditional JSON requirement."
          ],
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 516,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Settingsfunc.php",
              "line": 23,
              "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
              "reason": "Actual field hook handles loose truthiness and subscription verification."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "notification_minimummaximum": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 526,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "notification_booking": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 535,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "vat_included": {
          "description": "PHP loose comparison to exclusive stores 1, other values store 0. Response returns exclusive for stored 1 and including otherwise.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "including"
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              "exclusive",
              "including"
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 544,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "vat_reverse_charge_texts": {
          "description": "An associative language-to-text array is filtered to configured language keys; values pass through aP. Non-array input and unknown keys produce/are removed into an empty JSON list. Readback JSON-decodes storage; malformed legacy JSON yields null.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            {
              "de": "Example tax information"
            }
          ],
          "x-edoobox-canonicalSchema": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 553,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/helpers/edooboxhelp_helper.php",
              "line": 11560,
              "sha256": "090d351b5bde81813c7a829bedf2f1f9f978fce5765f246989779f996198934e",
              "reason": "Each recognized text is normalized by aP."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "offer_sort": {
          "description": "PHP loose comparison to date selects date; every other input stores manuell. Readback maps the alternative to manual. Input and output spellings differ.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "date"
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              "date",
              "manual"
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 580,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "offer_func_1": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 589,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "offer_func_1_status": {
          "description": "PHP loose comparison to numeric 3 selects storage text 3, otherwise 4. Readback emits numeric 3 or 4.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            3
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              3,
              4
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 598,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "offer_archiving": {
          "description": "Integer-casts the input, preserves modes 1/2/3 and maps all other values to 0. The output setter returns false for disabled.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            0
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              0,
              1,
              2,
              3
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 607,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "offer_archiving_reference_date": {
          "description": "Exact string start selects start; every other value selects visibility. This is normalization, not a rejecting enum.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "visibility"
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              "start",
              "visibility"
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 634,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "news_and_tricks": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 644,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_create_admin": {
          "description": "Integer-casts the input. Modes 1 and 2 remain selected; all other inputs normalize to disabled 0. Readback uses false for disabled.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            1
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              0,
              1,
              2
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 653,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_userlogin": {
          "description": "PHP integer-casts the input; 2, 3 and 4 remain their numeric modes, other inputs become 1. The mode list describes normalized output, not a rejecting input enum.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            1
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              1,
              2,
              3,
              4
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 686,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_login": {
          "description": "Integer-casts input: 2 stores y, 3 stores p, all other values store n. Response maps n/y/p to 1/2/3 and unmatched stored values to null.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            1
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              1,
              2,
              3
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 713,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_login_global_users": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 738,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_cancellation": {
          "description": "PHP integer-casts the input; 2, 3 and 4 remain their numeric modes, other inputs become 1. The mode list describes normalized output, not a rejecting input enum.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            1
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              1,
              2,
              3,
              4
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 757,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_cancellation_admin_confirmation_mail": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 784,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_reservation": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 803,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_paymentpage": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 812,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_sendinfo": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 822,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_label_notifications": {
          "description": "Non-array input becomes []. For each rule: trim a nonempty label of at most 15 characters, retain its first occurrence, require a PHP-valid email and a selected-account custom non-PDF email template. Invalid/duplicate entries are skipped, not a whole-field rejection. Storage uses internal template IDs only; response emits public emailtemplate v2 IDs.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            []
          ],
          "x-edoobox-canonicalSchema": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "label",
                "email",
                "emailtemplate"
              ],
              "properties": {
                "label": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 15
                },
                "email": {
                  "type": "string"
                },
                "emailtemplate": {
                  "type": "string",
                  "pattern": "^emailtemplate_[a-f0-9]{12}_-?[0-9]+$"
                }
              },
              "additionalProperties": false
            }
          },
          "x-edoobox-preconditions": [
            "The referenced template must already exist for this account; empty [] is a valid disabling input."
          ],
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 831,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Settings.php",
              "line": 3060,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Actual rule filtering and per-account template lookup."
            },
            {
              "file": "application/models/v2/Settings.php",
              "line": 3105,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Response filter emits typed public emailtemplate IDs."
            },
            {
              "file": "application/models/v2/Settings.php",
              "line": 3159,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Template must belong to the account and be an email template, not PDF."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_send_pdf": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 850,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_send_ics": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 859,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_reminder": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 878,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_reminder_hours": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 887,
          "x-edoobox-canonicalType": "integer",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            1
          ]
        },
        "booking_visitconfirmation": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 902,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_number": {
          "description": "The hook integer-casts the supplied value, rejects results outside 1..999999999, and rejects an already-used booking number in the selected account. A successful update stores the counter; coercible text is accepted, so a rejecting integer wire type would be inaccurate.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            100001
          ],
          "x-edoobox-canonicalSchema": {
            "type": "integer",
            "minimum": 1,
            "maximum": 999999999
          },
          "x-edoobox-preconditions": [
            "The chosen number must not already occur in the selected account."
          ],
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 937,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Settingsfunc.php",
              "line": 288,
              "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
              "reason": "Actual hook range check and tenant-scoped uniqueness query."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_cert_percent": {
          "description": "Integer-casts then clamps to 0 through 100. Out-of-range/coercible input is normalized instead of rejected. The response setter integer-casts stored rows; malformed legacy rows are not clamped on read.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            50
          ],
          "x-edoobox-canonicalSchema": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 948,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_cert_notvisitmail": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 975,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_cert_senddelayhours": {
          "description": "Integer-casts then clamps to 0 through 1440. Out-of-range/coercible input is normalized instead of rejected. The response setter integer-casts stored rows; malformed legacy rows are not clamped on read.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            50
          ],
          "x-edoobox-canonicalSchema": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1440
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 996,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_cert_validation_url": {
          "description": "Loose PHP comparison to true controls enable/disable. Enabling verifies the certificate_validation subscription feature; disabling bypasses that enablement check. Writes the certificate-validation flag.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            false
          ],
          "x-edoobox-canonicalSchema": {
            "type": "boolean"
          },
          "x-edoobox-preconditions": [
            "An enabled subscription feature is an account-dependent runtime precondition, not an unconditional JSON requirement."
          ],
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1024,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Settingsfunc.php",
              "line": 40,
              "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
              "reason": "Actual field hook handles loose truthiness and subscription verification."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_cert_attachpdf": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1046,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_cert_attachpdfpercent": {
          "description": "Integer-casts then clamps to 0 through 100. Out-of-range/coercible input is normalized instead of rejected. The response setter integer-casts stored rows; malformed legacy rows are not clamped on read.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            50
          ],
          "x-edoobox-canonicalSchema": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1206,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_cert_secondemail": {
          "description": "Getter maps PHP truthiness to integer enable/disable. Disabling always updates the flag. Enabling requires an existing stored destination field, or a supplied recognized booking_cert_secondemail_field public field key. A missing/unrecognized destination returns false from the hook. The companion field is conditionally required based on stored account state, not on every request.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            false
          ],
          "x-edoobox-canonicalSchema": {
            "type": "boolean"
          },
          "x-edoobox-preconditions": [
            "When no destination is stored, enabling requires booking_cert_secondemail_field in the same data object."
          ],
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1094,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Settingsfunc.php",
              "line": 641,
              "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
              "reason": "Actual conditional second-email flag hook; getter called explicitly and destination checked against stored settings."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_cert_secondemail_field": {
          "description": "A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. An unknown scalar key clears it; readback is false when empty, a public key when recognized, and null for unmatched legacy columns. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "email"
          ],
          "x-edoobox-canonicalSchema": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "status",
                  "gender",
                  "first_name",
                  "last_name",
                  "street",
                  "postcode",
                  "location",
                  "country",
                  "language",
                  "phone_number",
                  "email",
                  "company",
                  "data_1",
                  "data_2",
                  "data_3",
                  "data_4",
                  "data_5",
                  "data_6",
                  "data_7",
                  "data_8",
                  "data_9",
                  "data_10",
                  "data_11",
                  "data_12",
                  "data_13",
                  "data_14",
                  "data_15",
                  "data_16",
                  "data_17",
                  "data_18",
                  "data_19",
                  "data_20",
                  "data_21",
                  "data_22",
                  "data_23",
                  "data_24",
                  "data_25",
                  "data_26",
                  "data_27",
                  "data_28",
                  "data_29",
                  "data_30"
                ]
              },
              {
                "const": false
              }
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1115,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Datastructure.php",
              "line": 20,
              "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
              "reason": "Public field-key to storage-column map; this selector is not a database record ID."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_secondemail": {
          "description": "Getter maps PHP truthiness to integer enable/disable. Disabling always updates the flag. Enabling requires an existing stored destination field, or a supplied recognized booking_secondemail_field public field key. A missing/unrecognized destination returns false from the hook. The companion field is conditionally required based on stored account state, not on every request.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            false
          ],
          "x-edoobox-canonicalSchema": {
            "type": "boolean"
          },
          "x-edoobox-preconditions": [
            "When no destination is stored, enabling requires booking_secondemail_field in the same data object."
          ],
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1150,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Settingsfunc.php",
              "line": 693,
              "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
              "reason": "Actual conditional second-email flag hook; getter called explicitly and destination checked against stored settings."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_secondemail_field": {
          "description": "A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. An unknown scalar key clears it; readback is false when empty, a public key when recognized, and null for unmatched legacy columns. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "email"
          ],
          "x-edoobox-canonicalSchema": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "status",
                  "gender",
                  "first_name",
                  "last_name",
                  "street",
                  "postcode",
                  "location",
                  "country",
                  "language",
                  "phone_number",
                  "email",
                  "company",
                  "data_1",
                  "data_2",
                  "data_3",
                  "data_4",
                  "data_5",
                  "data_6",
                  "data_7",
                  "data_8",
                  "data_9",
                  "data_10",
                  "data_11",
                  "data_12",
                  "data_13",
                  "data_14",
                  "data_15",
                  "data_16",
                  "data_17",
                  "data_18",
                  "data_19",
                  "data_20",
                  "data_21",
                  "data_22",
                  "data_23",
                  "data_24",
                  "data_25",
                  "data_26",
                  "data_27",
                  "data_28",
                  "data_29",
                  "data_30"
                ]
              },
              {
                "const": false
              }
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1171,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Datastructure.php",
              "line": 20,
              "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
              "reason": "Public field-key to storage-column map; this selector is not a database record ID."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_offerlist_secondemail_field": {
          "description": "A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. An unknown scalar key clears it; readback is false when empty, a public key when recognized, and null for unmatched legacy columns. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "email"
          ],
          "x-edoobox-canonicalSchema": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "status",
                  "gender",
                  "first_name",
                  "last_name",
                  "street",
                  "postcode",
                  "location",
                  "country",
                  "language",
                  "phone_number",
                  "email",
                  "company",
                  "data_1",
                  "data_2",
                  "data_3",
                  "data_4",
                  "data_5",
                  "data_6",
                  "data_7",
                  "data_8",
                  "data_9",
                  "data_10",
                  "data_11",
                  "data_12",
                  "data_13",
                  "data_14",
                  "data_15",
                  "data_16",
                  "data_17",
                  "data_18",
                  "data_19",
                  "data_20",
                  "data_21",
                  "data_22",
                  "data_23",
                  "data_24",
                  "data_25",
                  "data_26",
                  "data_27",
                  "data_28",
                  "data_29",
                  "data_30"
                ]
              },
              {
                "const": false
              }
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1233,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Datastructure.php",
              "line": 20,
              "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
              "reason": "Public field-key to storage-column map; this selector is not a database record ID."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "booking_offerlist_cancel_mail": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1268,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_allow_promotions": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1288,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "booking_designation_promotions": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 50,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 1297
        },
        "skip_counter": false,
        "question_deliverables_show": false,
        "multi_offer_show": false,
        "multi_offer_child_limit": false,
        "automatic_deletion": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1367,
          "x-edoobox-canonicalType": "integer",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            1
          ]
        },
        "edsupport_access": {
          "description": "true or string true becomes 1; false, string false, null and empty string become 0; otherwise positive integer-cast values are retained, nonpositive values become 0. The getter does not reject noncanonical types.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            false
          ],
          "x-edoobox-canonicalSchema": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "integer",
                "minimum": 0
              }
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1395,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "payment_confirmation_mail": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1428,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "barcode_type": {
          "x-edoobox-knownInputs": [
            "pdf417",
            "qrcode",
            "datamatrix"
          ],
          "x-edoobox-normalization": "Switch default normalizes other input values; case labels are not an exhaustive accepted-input enum.",
          "examples": [
            "pdf417"
          ],
          "x-edoobox-sourceLine": 1437
        },
        "barcode_mobile_wallet": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1461,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "mobile_wallet_background_color": {
          "description": "Trims/string-casts; six hexadecimal digits with optional # normalize to uppercase #RRGGBB. Empty or malformed values become '#0068B0'. No rejecting input pattern is applied.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "#12ab34"
          ],
          "x-edoobox-canonicalSchema": {
            "type": "string"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1470,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Settings.php",
              "line": 3181,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Shared color normalizer returns uppercase hex or the field-specific fallback."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "mobile_wallet_foreground_color": {
          "description": "Trims/string-casts; six hexadecimal digits with optional # normalize to uppercase #RRGGBB. Empty or malformed values become ''. No rejecting input pattern is applied.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "#12ab34"
          ],
          "x-edoobox-canonicalSchema": {
            "type": "string"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1479,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Settings.php",
              "line": 3181,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Shared color normalizer returns uppercase hex or the field-specific fallback."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "mobile_wallet_use_offer_image": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1488,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "mobile_wallet_fallback_image_url": {
          "description": "String-casts, strips HTML tags, trims and byte-truncates to 500 bytes. Despite the field name, no URL syntax or scheme validator is applied.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "https://example.invalid/support"
          ],
          "x-edoobox-canonicalSchema": {
            "type": "string"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1497,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "mobile_wallet_display_name": {
          "description": "String-casts, strips HTML tags, trims and byte-truncates to 150 bytes. The response setter only string-casts stored data.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "Example organization"
          ],
          "x-edoobox-canonicalSchema": {
            "type": "string"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1506,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "mobile_wallet_support_url": {
          "description": "String-casts, strips HTML tags, trims and byte-truncates to 500 bytes. Despite the field name, no URL syntax or scheme validator is applied.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "https://example.invalid/support"
          ],
          "x-edoobox-canonicalSchema": {
            "type": "string"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1515,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "barcode_ticket": {
          "x-edoobox-knownInputs": [
            false,
            "always",
            "offer"
          ],
          "x-edoobox-normalization": "Switch default normalizes other input values; case labels are not an exhaustive accepted-input enum.",
          "examples": [
            false
          ],
          "x-edoobox-sourceLine": 1524
        },
        "collective_booking_max": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1548,
          "x-edoobox-canonicalType": "integer",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            1
          ]
        },
        "collective_booking_identify": {
          "description": "A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. Unknown keys return null; readback is false when empty, a public key when recognized, and null for unmatched legacy columns. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "email"
          ],
          "x-edoobox-canonicalSchema": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "status",
                  "gender",
                  "first_name",
                  "last_name",
                  "street",
                  "postcode",
                  "location",
                  "country",
                  "language",
                  "phone_number",
                  "email",
                  "company",
                  "data_1",
                  "data_2",
                  "data_3",
                  "data_4",
                  "data_5",
                  "data_6",
                  "data_7",
                  "data_8",
                  "data_9",
                  "data_10",
                  "data_11",
                  "data_12",
                  "data_13",
                  "data_14",
                  "data_15",
                  "data_16",
                  "data_17",
                  "data_18",
                  "data_19",
                  "data_20",
                  "data_21",
                  "data_22",
                  "data_23",
                  "data_24",
                  "data_25",
                  "data_26",
                  "data_27",
                  "data_28",
                  "data_29",
                  "data_30"
                ]
              },
              {
                "const": false
              }
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1563,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Datastructure.php",
              "line": 20,
              "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
              "reason": "Public field-key to storage-column map; this selector is not a database record ID."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "collective_booking_identify_privacy": {
          "description": "A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. The clear sentinel is stored as NO; unknown keys store empty text. Readback is false for NO, a public key when recognized, and null otherwise. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "email"
          ],
          "x-edoobox-canonicalSchema": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "status",
                  "gender",
                  "first_name",
                  "last_name",
                  "street",
                  "postcode",
                  "location",
                  "country",
                  "language",
                  "phone_number",
                  "email",
                  "company",
                  "data_1",
                  "data_2",
                  "data_3",
                  "data_4",
                  "data_5",
                  "data_6",
                  "data_7",
                  "data_8",
                  "data_9",
                  "data_10",
                  "data_11",
                  "data_12",
                  "data_13",
                  "data_14",
                  "data_15",
                  "data_16",
                  "data_17",
                  "data_18",
                  "data_19",
                  "data_20",
                  "data_21",
                  "data_22",
                  "data_23",
                  "data_24",
                  "data_25",
                  "data_26",
                  "data_27",
                  "data_28",
                  "data_29",
                  "data_30"
                ]
              },
              {
                "const": false
              }
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1586,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/Datastructure.php",
              "line": 20,
              "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
              "reason": "Public field-key to storage-column map; this selector is not a database record ID."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "collective_booking_identify_obligatory": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1610,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "collective_booking_master": {
          "x-edoobox-knownInputs": [
            "manual",
            "all",
            false
          ],
          "x-edoobox-normalization": "Switch default normalizes other input values; case labels are not an exhaustive accepted-input enum.",
          "examples": [
            "manual"
          ],
          "x-edoobox-sourceLine": 1673
        },
        "security_headers_csp": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1654,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "design_subcategory": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1699,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "legaltext_atc": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1708,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "legaltext_ri": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1717,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "legaltext_pp": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1726,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "attendance_config": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "status": {
                "type": [
                  "number",
                  "string"
                ],
                "description": "Converted to integer by the callback."
              },
              "order": {
                "type": [
                  "number",
                  "string"
                ]
              },
              "counter": {},
              "val": {},
              "color": {},
              "help": {}
            },
            "additionalProperties": true,
            "required": [
              "status"
            ]
          },
          "description": "The converted statuses 0, 1 and 2 must each occur exactly once among processed items. Counter values outside 0..100 become 0. Extra statuses are supported; processing stops after 41 entries or on a missing status.",
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settingsfunc.php",
              "line": 153,
              "reason": "PUT sorts the status-record array, casts status/order and normalizes counter.",
              "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f"
            },
            {
              "file": "application/models/v2/Settingsfunc.php",
              "line": 208,
              "reason": "Exactly three required-status occurrences are checked.",
              "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f"
            },
            {
              "file": "application/models/v2/Settings.php",
              "line": 1739,
              "reason": "Response returns ordered status records as a JSON array.",
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "language": {
          "type": "object",
          "properties": {
            "active": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": true,
          "description": "Active language codes in desired order. Unknown codes are ignored. Account language configuration governs availability.",
          "required": [
            "active"
          ],
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settingsfunc.php",
              "line": 77,
              "reason": "PUT expects an active language-code array inside an object.",
              "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f"
            },
            {
              "file": "application/models/v2/Settings.php",
              "line": 1759,
              "reason": "The resource Structure response placeholder is false; enriched action responses may differ.",
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "edsubscription": false,
        "edsubscription_testinguntildate": false,
        "versions": false,
        "pdf_engine": {
          "description": "PHP switch maps input mode 1 to dompdf; mode 2 and other inputs default to mpdf. Readback maps stored dompdf/mpdf to numeric 1/2, with null for unknown stored text.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            2
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              1,
              2
            ]
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1821,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "pdf_edit_restriction_password": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 1851,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "pdf_paper_size": {
          "description": "Requires an exact installed library paper-size key after case folding, before aP trim/storage normalization. Unknown values return strict false from the getter and the final generic joined writer rejects ED80100 before joined persistence. The existing case-insensitive pattern reflects those installed meaningful paper-size strings; the own parent and relation predicates remain independently checked.",
          "x-edoobox-schemaStatus": "source-reviewed-validation",
          "examples": [
            "a4"
          ],
          "x-edoobox-canonicalSchema": {
            "enum": [
              "4a0",
              "2a0",
              "a0",
              "a1",
              "a2",
              "a3",
              "a4",
              "a5",
              "a6",
              "a7",
              "a8",
              "a9",
              "a10",
              "b0",
              "b1",
              "b2",
              "b3",
              "b4",
              "b5",
              "b6",
              "b7",
              "b8",
              "b9",
              "b10",
              "c0",
              "c1",
              "c2",
              "c3",
              "c4",
              "c5",
              "c6",
              "c7",
              "c8",
              "c9",
              "c10",
              "ra0",
              "ra1",
              "ra2",
              "ra3",
              "ra4",
              "sra0",
              "sra1",
              "sra2",
              "sra3",
              "sra4",
              "letter",
              "half-letter",
              "legal",
              "ledger",
              "tabloid",
              "executive",
              "folio",
              "commercial #10 envelope",
              "catalog #10 1/2 envelope",
              "8.5x11",
              "8.5x14",
              "11x17"
            ]
          },
          "type": "string",
          "pattern": "^(?:4[aA]0|2[aA]0|[aA]0|[aA]1|[aA]2|[aA]3|[aA]4|[aA]5|[aA]6|[aA]7|[aA]8|[aA]9|[aA]10|[bB]0|[bB]1|[bB]2|[bB]3|[bB]4|[bB]5|[bB]6|[bB]7|[bB]8|[bB]9|[bB]10|[cC]0|[cC]1|[cC]2|[cC]3|[cC]4|[cC]5|[cC]6|[cC]7|[cC]8|[cC]9|[cC]10|[rR][aA]0|[rR][aA]1|[rR][aA]2|[rR][aA]3|[rR][aA]4|[sS][rR][aA]0|[sS][rR][aA]1|[sS][rR][aA]2|[sS][rR][aA]3|[sS][rR][aA]4|[lL][eE][tT][tT][eE][rR]|[hH][aA][lL][fF]\\-[lL][eE][tT][tT][eE][rR]|[lL][eE][gG][aA][lL]|[lL][eE][dD][gG][eE][rR]|[tT][aA][bB][lL][oO][iI][dD]|[eE][xX][eE][cC][uU][tT][iI][vV][eE]|[fF][oO][lL][iI][oO]|[cC][oO][mM][mM][eE][rR][cC][iI][aA][lL]\\ \\#10\\ [eE][nN][vV][eE][lL][oO][pP][eE]|[cC][aA][tT][aA][lL][oO][gG]\\ \\#10\\ 1/2\\ [eE][nN][vV][eE][lL][oO][pP][eE]|8\\.5[xX]11|8\\.5[xX]14|11[xX]17)$",
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1870,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "vendor/dompdf/dompdf/src/Adapter/CPDF.php",
              "line": 42,
              "sha256": "7dca4a096b08c006f12bfccd733068223d92e502b9a625c49bd919373f714001",
              "reason": "Installed Dompdf paper-size key list, matched case-insensitively by the source getter."
            },
            {
              "file": "application/models/v2/API_DATA.php",
              "line": 1853,
              "sha256": "c0e15d26a7a4f3fb3c25e35557d4420ad395b2af3925caec292de08e32ebf44c",
              "reason": "Normal fields check strict false; joined fields instead collect getter output at 1793 and execute it at 1827 without that rejection. Final joined writer rejects strict-false getters and unresolved/multi-join metadata before writes, anchors the joined row to the own parent (including account-key parents), and preserves constant join.where constraints as additional AND predicates. Join-only writes verify the own existing parent. Generic simple-owner hard/soft DELETE now verifies the own existing parent before hooks and repeats FID in DML; missing optional hook data no longer warns. Read, insert, signed authority and GET-effect classifications are unchanged."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "pdf_custom_css": {
          "description": "Parses CSS, removes non-declaration blocks, keeps selectors starting .custom_ or *, and filters rule value node classes. font-family is retained only when a family is among Pdf::$fonts. Stores compact CSS base64; readback decodes/formats it or returns empty text. Parser errors and PDF renderer prerequisites are not a closed JSON Schema grammar.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            ".custom_example { color: #123456; }"
          ],
          "x-edoobox-canonicalSchema": {
            "type": "string"
          },
          "x-edoobox-preconditions": [
            "CSS parser grammar and configured font support are checked by source/parser, not replicated as a misleading JSON pattern."
          ],
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1892,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/libraries/edoobox/integrations/pdf/Pdf.php",
              "line": 16,
              "sha256": "b286cdc4d20e02601db9acc35b06564357f10378961e72cb8f4e22e64b3a3254",
              "reason": "Allowed PDF font keys used by the CSS normalizer."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "dinaco_client_id": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 250,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 1960
        },
        "dinaco_client_secret": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 250,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 1979
        },
        "gtm_mess_id": {
          "description": "For input longer than five bytes, a non-anchored G-[a-zA-z0-9]{5,20} substring must occur or the value becomes empty. Short values are retained. aP then trims, replaces newlines and truncates. This is not a strict GA4-ID pattern validator.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "G-EXAMPLE1234"
          ],
          "x-edoobox-canonicalSchema": {
            "type": "string"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 1998,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/helpers/edooboxhelp_helper.php",
              "line": 11560,
              "sha256": "090d351b5bde81813c7a829bedf2f1f9f978fce5765f246989779f996198934e",
              "reason": "aP normalization after the substring test."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "gtm_container_id": {
          "x-edoobox-canonicalType": "string",
          "x-edoobox-maxStoredLength": 250,
          "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
          "examples": [
            "Example"
          ],
          "x-edoobox-sourceLine": 2024
        },
        "meta_html": {
          "description": "Parses supplied HTML and keeps only meta tags whose name is google-site-verification or facebook-domain-verification. Only their name/content attributes are serialized, then aP truncates to 250 stored characters. This is a lossy sanitizer, not a rejecting HTML schema.",
          "x-edoobox-schemaStatus": "source-reviewed-normalization",
          "examples": [
            "<meta name=\"google-site-verification\" content=\"synthetic-verification\">"
          ],
          "x-edoobox-canonicalSchema": {
            "type": "string"
          },
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 2044,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "system_attachments_file_naming": {
          "type": "object",
          "properties": {},
          "additionalProperties": {
            "type": "object",
            "properties": {},
            "additionalProperties": {
              "type": "string"
            }
          },
          "description": "Map keyed by an emailtemplate public ID or ics. Each value maps language codes to file-name text. Filename characters and suffix are normalized; unknown templates/languages are ignored.",
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 2076,
              "reason": "Input iterates template/ics keys and language-to-name objects; edid occurs on map keys.",
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
            },
            {
              "file": "application/models/v2/Settings.php",
              "line": 2106,
              "reason": "Response maps stored keys back to public emailtemplate IDs or ics.",
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "website_integration": {
          "enum": [
            "iframe",
            "wordpress"
          ],
          "x-edoobox-sourceLine": 2132
        },
        "website_url": {
          "description": "Accepts empty string or a string accepted by PHP FILTER_VALIDATE_URL. Other values return strict false and API_DATA rejects the update. No restriction to HTTP/HTTPS is imposed by this getter.",
          "x-edoobox-schemaStatus": "source-reviewed-validation",
          "examples": [
            "https://example.invalid"
          ],
          "x-edoobox-canonicalSchema": {
            "type": "string"
          },
          "type": "string",
          "x-edoobox-preconditions": [
            "PHP FILTER_VALIDATE_URL is the rejecting syntax check; JSON Schema format:uri is not asserted as an exact equivalent."
          ],
          "x-edoobox-contractSource": [
            {
              "file": "application/models/v2/Settings.php",
              "line": 2159,
              "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
              "reason": "Structure input getter, response setter and update flags."
            },
            {
              "file": "application/models/v2/API_DATA.php",
              "line": 1853,
              "sha256": "c0e15d26a7a4f3fb3c25e35557d4420ad395b2af3925caec292de08e32ebf44c",
              "reason": "Strict false getter rejects invalid URL inputs. Final joined writer rejects strict-false getters and unresolved/multi-join metadata before writes, anchors the joined row to the own parent (including account-key parents), and preserves constant join.where constraints as additional AND predicates. Join-only writes verify the own existing parent. Generic simple-owner hard/soft DELETE now verifies the own existing parent before hooks and repeats FID in DML; missing optional hook data no longer warns. Read, insert, signed authority and GET-effect classifications are unchanged."
            },
            {
              "file": "docs/openapi/reviews/settings-fields.json",
              "line": 1,
              "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
              "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
            }
          ]
        },
        "admin_custom_permissions": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 2172,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        },
        "admin_academic_title_use": {
          "x-edoobox-schemaStatus": "source-inferred",
          "x-edoobox-sourceLine": 2192,
          "x-edoobox-canonicalType": "boolean",
          "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
          "examples": [
            false
          ]
        }
      },
      "additionalProperties": true,
      "description": "Source-declared fields; action-specific and account validation still apply.",
      "minProperties": 1,
      "x-edoobox-readOnlyFields": [
        "id",
        "congress_module",
        "root_category",
        "shortcut",
        "organization_country",
        "organization_currency",
        "skip_counter",
        "question_deliverables_show",
        "multi_offer_show",
        "multi_offer_child_limit",
        "edsubscription",
        "edsubscription_testinguntildate",
        "versions"
      ],
      "x-edoobox-clientRestriction": "Read-only fields are forbidden by this client contract to prevent silently ignored writes; the legacy API itself skips them. Explicit source-marked update context fields remain accepted for hook validation without changing their immutable database columns."
    },
    "id": {
      "type": "string",
      "pattern": "^[a-z0-9]+_[a-f0-9]{12}_-?[0-9]+$",
      "description": "Opaque edoobox v2 object ID returned by this account. Never send a raw database ID. The synthetic example is illustrative and is not a real record.",
      "examples": [
        "settings_012345abcdef_123456"
      ]
    }
  },
  "additionalProperties": true,
  "required": [
    "data"
  ]
}
Account-Einstellungen ändern
{
  "data": {
    "organization_name": "Beispielorganisation",
    "firstweekday": 1,
    "automatic_deletion": 180
  }
}
05

Antworten

11

HTTP-Status und Antwortinhalt gemeinsam auswerten. In dieser API können auch Antworten mit HTTP 200 einen Fehler enthalten.

200application/json

Öffentliche Account-ID und update-Ergebnis.

Response Header

X-Edoobox-Revision

Rotated account revision supplied for the next action in one reviewed sequence.

string
pattern
"^[a-f0-9]{32}$"
Vollständiges Schema als JSON
{
  "type": "string",
  "pattern": "^[a-f0-9]{32}$"
}

application/json

object
success boolean
error boolean | string
error_code string
data object
id string erforderlich

Öffentliche v2-ID aus dem ausgewählten Account; keine interne Datenbank-ID.

pattern
"^account_[a-f0-9]{12}_-?[0-9]+$"
update boolean erforderlich

Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.

type string

Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.

Vollständiges Schema als JSON
{
  "type": "object",
  "properties": {
    "success": {
      "type": "boolean"
    },
    "error": {
      "type": [
        "boolean",
        "string"
      ]
    },
    "error_code": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^account_[a-f0-9]{12}_-?[0-9]+$",
          "description": "Öffentliche v2-ID aus dem ausgewählten Account; keine interne Datenbank-ID."
        },
        "update": {
          "type": "boolean"
        }
      },
      "additionalProperties": true,
      "required": [
        "id",
        "update"
      ]
    },
    "type": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
Beispiel
{
  "success": true,
  "error": false,
  "data": {
    "id": "account_012345abcdef_123456",
    "update": true
  }
}
400application/json

Invalid request.

application/json

Typ nicht eingeschränkt

Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.

Beispiel
{
  "success": false,
  "error": "ED40006"
}
401application/json

Missing/expired token, missing account context, account paused or model-specific authorization failure.

application/json

Typ nicht eingeschränkt

Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.

Beispiel
{
  "success": false,
  "error": "ED40103"
}
402application/json

Missing/invalid action data or subscription/operation restriction.

application/json

Typ nicht eingeschränkt

Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.

Beispiel
{
  "success": false,
  "error": "ED80100"
}
403application/json

Permission denied. Browser CORS rejection may have an empty body.

application/json

Typ nicht eingeschränkt

Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.

Beispiel
{
  "success": false,
  "error": "ED40340"
}
404application/json

Unknown resource/action or unsupported method.

application/json

Typ nicht eingeschränkt

Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.

Beispiel
{
  "success": false,
  "error": "ED80019"
}
409application/json

The account changed after the reviewed read. No domain operation is dispatched; obtain fresh state and review again.

application/json

object

Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.

Vollständiges Schema als JSON
{
  "type": "object",
  "additionalProperties": true
}
Beispiel
{
  "error": "ED40901",
  "error_code": "mutation_revision_conflict"
}
422application/json

Validation failed.

application/json

Typ nicht eingeschränkt

Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.

Beispiel
{
  "success": false,
  "error": "ED80020"
}
429application/json

Request/login rate limit exceeded. Honor Retry-After when supplied; legacy rate-limit paths may omit it. Retry only proven reads within a bounded deadline; a mutation is never automatically replayed after an ambiguous response.

Response Header

Retry-After

Optional server delay in whole seconds or an HTTP date. Absence is not permission for an immediate retry.

string
Schema-Beispiel
"30"
Vollständiges Schema als JSON
{
  "type": "string",
  "examples": [
    "30"
  ]
}

application/json

Typ nicht eingeschränkt

Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.

Beispiel
{
  "success": false,
  "error": "ED42902"
}
502application/json

Server-side operation failed.

application/json

Typ nicht eingeschränkt

Kein Schema angegeben. Daraus lässt sich kein vollständiger Feldvertrag ableiten.

Beispiel
{
  "success": false,
  "error": "ED50201"
}
503application/json

The account mutation lock or revision store is unavailable. No unprotected fallback is executed.

Response Header

Retry-After

integer

Fester Wert: 1

Vollständiges Schema als JSON
{
  "type": "integer",
  "const": 1
}

application/json

object

Zusätzliche, hier nicht aufgeführte Felder sind erlaubt.

Vollständiges Schema als JSON
{
  "type": "object",
  "additionalProperties": true
}
Beispiel
{
  "error": "ED50301",
  "error_code": "mutation_revision_busy"
}
06

Quelle & Metadaten

Quelle laut Spezifikationapplication/models/v2/Settings.php:2324updateSettings()

Diese Angaben stammen unverändert aus der gelieferten OpenAPI-Datei. Zusätzliche Freigaben, Vorbedingungen, sensible Felder und Hinweise stehen in den Erweiterungen.

x-edoobox-mutates-state
true
x-edoobox-runtimeMutationGuard
true
x-edoobox-documentationReview
{
  "file": "docs/openapi/operation-contracts/06-admin-settings.json",
  "notes": []
}
x-edoobox-source
{
  "file": "application/models/v2/Settings.php",
  "method": "updateSettings",
  "line": 2324
}
x-edoobox-documentationStatus
"reviewed"
x-edoobox-readOnly
false
x-edoobox-safeForAutomation
false
x-edoobox-permission
{
  "resource": "settings",
  "short": "setti",
  "checkedByDispatcher": true,
  "levels": [
    3,
    4
  ],
  "description": "Resource permission mapping from APIPermissions(), Authfunc::_getCheckJWT. Additional model/admin/plugin checks may apply; resources absent from api_permission do not acquire a fictitious scope."
}
Vollständige Operation als JSON
{
  "operationId": "put_v2_settings_id",
  "summary": "Account-Einstellungen ändern",
  "description": "Aktualisiert die übergebenen zentralen Account-Einstellungen. Es werden nur bekannte, schreibbare Structure-Felder verarbeitet; Datums-/Zahlen-/Schalterwerte werden gemäß dem jeweiligen Feld normalisiert. Dynamische Datenfeldnamen für Mehrfachanmeldung oder Zweitemail müssen zur aktuellen Teilnehmerdatenstruktur gehören. Sprach-, Präsenz-, Abrechnungs- und Buchungsregeln können weitere native Validierungen und Folgeänderungen auslösen; Abonnement-/Berechtigungsfreigaben bleiben maßgeblich.",
  "tags": [
    "settings"
  ],
  "security": [
    {
      "bearerAuth": [],
      "accountContext": []
    },
    {
      "sessionCookie": [],
      "accountContext": []
    }
  ],
  "parameters": [
    {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Öffentliche account-ID.",
      "schema": {
        "type": "string",
        "pattern": "^account_[a-f0-9]{12}_-?[0-9]+$",
        "description": "Öffentliche v2-ID aus dem ausgewählten Account; keine interne Datenbank-ID.",
        "examples": [
          "account_012345abcdef_123456"
        ]
      }
    },
    {
      "name": "language",
      "in": "header",
      "required": false,
      "description": "Account language code, where the resource supports setLanguage().",
      "schema": {
        "type": "string",
        "examples": [
          "de"
        ]
      }
    },
    {
      "name": "X-Edoobox-If-Revision",
      "in": "header",
      "required": false,
      "schema": {
        "type": "string",
        "pattern": "^[a-f0-9]{32}$",
        "examples": [
          "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
        ]
      },
      "description": "Optional account mutation revision from a preceding authenticated auth-context snapshot. The dispatcher compares it while holding the account lock; mismatch409 requires a new review."
    }
  ],
  "responses": {
    "200": {
      "description": "Öffentliche Account-ID und update-Ergebnis.",
      "content": {
        "application/json": {
          "example": {
            "success": true,
            "error": false,
            "data": {
              "id": "account_012345abcdef_123456",
              "update": true
            }
          },
          "schema": {
            "type": "object",
            "properties": {
              "success": {
                "type": "boolean"
              },
              "error": {
                "type": [
                  "boolean",
                  "string"
                ]
              },
              "error_code": {
                "type": "string"
              },
              "data": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^account_[a-f0-9]{12}_-?[0-9]+$",
                    "description": "Öffentliche v2-ID aus dem ausgewählten Account; keine interne Datenbank-ID."
                  },
                  "update": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": true,
                "required": [
                  "id",
                  "update"
                ]
              },
              "type": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        }
      },
      "headers": {
        "X-Edoobox-Revision": {
          "schema": {
            "type": "string",
            "pattern": "^[a-f0-9]{32}$"
          },
          "description": "Rotated account revision supplied for the next action in one reviewed sequence."
        }
      }
    },
    "400": {
      "description": "Invalid request.",
      "content": {
        "application/json": {
          "example": {
            "success": false,
            "error": "ED40006"
          }
        }
      }
    },
    "401": {
      "description": "Missing/expired token, missing account context, account paused or model-specific authorization failure.",
      "content": {
        "application/json": {
          "example": {
            "success": false,
            "error": "ED40103"
          }
        }
      }
    },
    "402": {
      "description": "Missing/invalid action data or subscription/operation restriction.",
      "content": {
        "application/json": {
          "example": {
            "success": false,
            "error": "ED80100"
          }
        }
      }
    },
    "403": {
      "description": "Permission denied. Browser CORS rejection may have an empty body.",
      "content": {
        "application/json": {
          "example": {
            "success": false,
            "error": "ED40340"
          }
        }
      }
    },
    "404": {
      "description": "Unknown resource/action or unsupported method.",
      "content": {
        "application/json": {
          "example": {
            "success": false,
            "error": "ED80019"
          }
        }
      }
    },
    "409": {
      "description": "The account changed after the reviewed read. No domain operation is dispatched; obtain fresh state and review again.",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "additionalProperties": true
          },
          "example": {
            "error": "ED40901",
            "error_code": "mutation_revision_conflict"
          }
        }
      }
    },
    "422": {
      "description": "Validation failed.",
      "content": {
        "application/json": {
          "example": {
            "success": false,
            "error": "ED80020"
          }
        }
      }
    },
    "429": {
      "description": "Request/login rate limit exceeded. Honor Retry-After when supplied; legacy rate-limit paths may omit it. Retry only proven reads within a bounded deadline; a mutation is never automatically replayed after an ambiguous response.",
      "content": {
        "application/json": {
          "example": {
            "success": false,
            "error": "ED42902"
          }
        }
      },
      "headers": {
        "Retry-After": {
          "description": "Optional server delay in whole seconds or an HTTP date. Absence is not permission for an immediate retry.",
          "schema": {
            "type": "string",
            "examples": [
              "30"
            ]
          }
        }
      }
    },
    "502": {
      "description": "Server-side operation failed.",
      "content": {
        "application/json": {
          "example": {
            "success": false,
            "error": "ED50201"
          }
        }
      }
    },
    "503": {
      "description": "The account mutation lock or revision store is unavailable. No unprotected fallback is executed.",
      "headers": {
        "Retry-After": {
          "schema": {
            "type": "integer",
            "const": 1
          }
        }
      },
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "additionalProperties": true
          },
          "example": {
            "error": "ED50301",
            "error_code": "mutation_revision_busy"
          }
        }
      }
    }
  },
  "x-edoobox-mutates-state": true,
  "requestBody": {
    "required": true,
    "content": {
      "application/json": {
        "schema": {
          "type": "object",
          "properties": {
            "data": {
              "type": "object",
              "properties": {
                "id": false,
                "firstweekday": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 44,
                  "x-edoobox-canonicalType": "integer",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    1
                  ]
                },
                "format_date": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 53,
                  "x-edoobox-canonicalType": "integer",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    1
                  ]
                },
                "format_time": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 62,
                  "x-edoobox-canonicalType": "integer",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    1
                  ]
                },
                "format_calendar_grid": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 71,
                  "x-edoobox-canonicalType": "integer",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    1
                  ]
                },
                "format_timezone": {
                  "type": "string",
                  "description": "Existing IANA timezone name, for example Europe/Zurich; the update callback looks up zone_name.",
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settingsfunc.php",
                      "line": 5,
                      "reason": "PUT consumes a zone-name string instead of the integer get placeholder.",
                      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f"
                    },
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 85,
                      "reason": "Response returns the account timezone zone_name.",
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "congress_module": false,
                "format_number": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 112,
                  "x-edoobox-canonicalType": "integer",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    1
                  ]
                },
                "design": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+_[a-f0-9]{12}_-?[0-9]+$",
                  "description": "Opaque edoobox v2 object ID returned by this account. Never send a raw database ID. The synthetic example is illustrative and is not a real record.",
                  "examples": [
                    "design_012345abcdef_123456"
                  ],
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 121
                },
                "root_category": false,
                "shortcut": false,
                "organization_name": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 200,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 150
                },
                "organization_contactperson": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 250,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 159
                },
                "organization_street": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 120,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 168
                },
                "organization_postcode": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 20,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 177
                },
                "organization_town": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 200,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 186
                },
                "organization_country": false,
                "organization_language": {
                  "description": "Maps a configured language key to its internal language entry; unknown keys default internally. Response returns the configured language key or null for an unmatched legacy value. This is a language selector, not an externally exposed numeric ID.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "de"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "string"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 205,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/helpers/langedoobox_helper.php",
                      "line": 731,
                      "sha256": "6454b27d47a74f3cf236ef8e258fbe821228c1607165d00433a309b2e9127d3c",
                      "reason": "edLangIDByName returns configured entry, with fallback for unknown names."
                    },
                    {
                      "file": "application/helpers/langedoobox_helper.php",
                      "line": 566,
                      "sha256": "6454b27d47a74f3cf236ef8e258fbe821228c1607165d00433a309b2e9127d3c",
                      "reason": "edLangById converts internal entries back to public language keys."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "organization_phone": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 120,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 214
                },
                "organization_url": {
                  "description": "Removes exact lowercase leading http:// or https:// before aP trim/newline/truncation to 250 stored characters. No URL syntax is required; other schemes and uppercase prefixes are not normalized in that step.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "https://example.invalid"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "string"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 223,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/helpers/edooboxhelp_helper.php",
                      "line": 11560,
                      "sha256": "090d351b5bde81813c7a829bedf2f1f9f978fce5765f246989779f996198934e",
                      "reason": "aP text storage normalization."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "organization_email": {
                  "type": "string",
                  "maxLength": 200,
                  "description": "Trimmed input must pass PHP FILTER_VALIDATE_EMAIL. Native PUT rejects raw input over200 UTF-8 characters (including outer whitespace), escaped trimmed storage over200 characters, or any aP/aQ roundtrip change to the validated address. Rejection returns the existing invalid-email path before persistence; valid addresses are preserved.",
                  "x-edoobox-validation": "PHP FILTER_VALIDATE_EMAIL after trim; raw UTF-8 length<=200; escaped trimmed length<=200; aQ(aP(trimmed,true,200))===trimmed",
                  "x-edoobox-maxStoredLength": 200,
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settingsfunc.php",
                      "line": 57,
                      "reason": "PUT callback validates the trimmed email syntax, checks raw and encoded lengths, and requires an exact aP/aQ identity before returning storage. False is rejected by generic update as ED90100 before a write.",
                      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
                      "lineEnd": 75
                    },
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 237,
                      "reason": "Incoming model getter is bounded to200 characters; generic PUT uses the dedicated validation hook; response unescapes stored text.",
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "lineEnd": 246
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "organization_currency": false,
                "billingaddress_organization": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 100,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 257
                },
                "billingaddress_user": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 50,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 266
                },
                "billingaddress_street": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 100,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 275
                },
                "billingaddress_postcode_town": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 100,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 284
                },
                "billingaddress_phone": {
                  "description": "Trims the value then applies aP text normalization (trim/newline replacement/truncation to 250 stored characters). It does not validate telephone syntax. Some nonscalar values cause a PHP type error before aP.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "+41 00 000 00 00"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "string"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 293,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/helpers/edooboxhelp_helper.php",
                      "line": 11560,
                      "sha256": "090d351b5bde81813c7a829bedf2f1f9f978fce5765f246989779f996198934e",
                      "reason": "Actual aP string-only/truncating storage normalization."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "billingaddress_email": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 250,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 303
                },
                "billingaddress_status": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 312,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "user_duplicate_config": {
                  "description": "Accepts a decoded object/array or a JSON-encoded string; non-array/invalid JSON becomes defaults. Known keys are normalized: booleans; candidate threshold clamped0..100; nullable auto-merge threshold1..100; max_merge_users2..10; newest/oldest strategy with default; recognized unique field rules with weights1..10. Explicit rules:[] clears rules. Unknown keys/rules are discarded; hash/version are computed server-side. Changing matching rules invalidates cached duplicate candidates, indexes and worker state.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    {
                      "enabled": true,
                      "candidate_threshold": 60,
                      "rules": []
                    }
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "object"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 321,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Userduplicatefunc.php",
                      "line": 28,
                      "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
                      "reason": "Actual normalizeConfigForSave preserves unchanged rule hashes and normalizes current state."
                    },
                    {
                      "file": "application/models/v2/Userduplicatefunc.php",
                      "line": 40,
                      "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
                      "reason": "Full known config defaults, coercion, clamping, hash/version semantics."
                    },
                    {
                      "file": "application/models/v2/Userduplicatefunc.php",
                      "line": 648,
                      "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
                      "reason": "Rule filtering, uniqueness and weight normalization."
                    },
                    {
                      "file": "application/models/v2/Userduplicatefunc.php",
                      "line": 968,
                      "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
                      "reason": "Allowed public data-field selectors for duplicate matching."
                    },
                    {
                      "file": "application/models/v2/Userduplicatefunc.php",
                      "line": 488,
                      "sha256": "10da9ce285a01836c403fec784c04775e7713b8f0c61d49c21de38cf3f8ea157",
                      "reason": "Changed matching rules invalidate derived duplicate data, not only the stored JSON."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "admin_avatar_mode": {
                  "description": "String-casts the input; exact symbol selects symbol, every other value selects face. Unsupported values default rather than fail.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "symbol"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      "face",
                      "symbol"
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 344,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "account_billing_recipient_type": {
                  "description": "Strict recognized strings organization, billing_address and admin are stored; legacy email and every other value normalize to organization. This is a defaulting normalizer, not a rejecting input enum.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "organization"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      "organization",
                      "billing_address",
                      "admin"
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 363,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "account_billing_recipient_email": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 250,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 390
                },
                "account_billing_recipient_admin_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^admin_[a-f0-9]{12}_(?:-35|[1-9][0-9]*)$",
                      "examples": [
                        "admin_012345abcdef_123456"
                      ],
                      "description": "Canonical public admin v2 ID issued in this account; server validates the account-bound checksum and rejects raw IDs."
                    },
                    {
                      "enum": [
                        null,
                        false,
                        0,
                        "0",
                        ""
                      ],
                      "x-edoobox-id-kind": "empty-relation"
                    }
                  ],
                  "examples": [
                    "admin_012345abcdef_123456",
                    null,
                    false
                  ],
                  "description": "Choose an account-owned administrator for billing. The exact clear sentinels null, false, 0, string 0 and the empty string normalize to no administrator. Positive database primary keys are rejected; numeric acceptance is confined to the literal clear sentinel 0.",
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 421,
                      "reason": "The corrected inbound getter accepts a canonical tenant-bound admin v2 reference and normalizes explicit clear sentinels; positive raw primary keys are rejected.",
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
                    },
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 437,
                      "reason": "The outbound setter encodes a positive database admin key as a public v2 ID and emits false for zero.",
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
                    },
                    {
                      "file": "application/models/v2/API_DATA.php",
                      "line": 1853,
                      "reason": "Join updates call the field getter before persisting; response serialization calls the field setter at line1068. Final joined writer rejects strict-false getters and unresolved/multi-join metadata before writes, anchors the joined row to the own parent (including account-key parents), and preserves constant join.where constraints as additional AND predicates. Join-only writes verify the own existing parent. Generic simple-owner hard/soft DELETE now verifies the own existing parent before hooks and repeats FID in DML; missing optional hook data no longer warns. Read, insert, signed authority and GET-effect classifications are unchanged.",
                      "sha256": "c0e15d26a7a4f3fb3c25e35557d4420ad395b2af3925caec292de08e32ebf44c"
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "account_billing_auto_charge_enabled": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 440,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "account_billing_topup_enabled": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 459,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "account_billing_topup_threshold": {
                  "description": "Casts the input to PHP float and rounds to two decimal places. No positive minimum, currency range or rejecting numeric wire type is enforced by this getter.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    25.5
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "number"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 478,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "account_billing_topup_amount": {
                  "description": "Casts the input to PHP float and rounds to two decimal places. No positive minimum, currency range or rejecting numeric wire type is enforced by this getter.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    25.5
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "number"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 497,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "internal_all": {
                  "description": "Loose PHP comparison to true controls enable/disable. Enabling verifies the internal_function subscription feature; disabling bypasses that enablement check. Enable also regenerates the internal access code; disable clears it.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    false
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "boolean"
                  },
                  "x-edoobox-preconditions": [
                    "An enabled subscription feature is an account-dependent runtime precondition, not an unconditional JSON requirement."
                  ],
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 516,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Settingsfunc.php",
                      "line": 23,
                      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
                      "reason": "Actual field hook handles loose truthiness and subscription verification."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "notification_minimummaximum": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 526,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "notification_booking": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 535,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "vat_included": {
                  "description": "PHP loose comparison to exclusive stores 1, other values store 0. Response returns exclusive for stored 1 and including otherwise.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "including"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      "exclusive",
                      "including"
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 544,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "vat_reverse_charge_texts": {
                  "description": "An associative language-to-text array is filtered to configured language keys; values pass through aP. Non-array input and unknown keys produce/are removed into an empty JSON list. Readback JSON-decodes storage; malformed legacy JSON yields null.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    {
                      "de": "Example tax information"
                    }
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 553,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/helpers/edooboxhelp_helper.php",
                      "line": 11560,
                      "sha256": "090d351b5bde81813c7a829bedf2f1f9f978fce5765f246989779f996198934e",
                      "reason": "Each recognized text is normalized by aP."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "offer_sort": {
                  "description": "PHP loose comparison to date selects date; every other input stores manuell. Readback maps the alternative to manual. Input and output spellings differ.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "date"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      "date",
                      "manual"
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 580,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "offer_func_1": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 589,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "offer_func_1_status": {
                  "description": "PHP loose comparison to numeric 3 selects storage text 3, otherwise 4. Readback emits numeric 3 or 4.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    3
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      3,
                      4
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 598,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "offer_archiving": {
                  "description": "Integer-casts the input, preserves modes 1/2/3 and maps all other values to 0. The output setter returns false for disabled.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    0
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      0,
                      1,
                      2,
                      3
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 607,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "offer_archiving_reference_date": {
                  "description": "Exact string start selects start; every other value selects visibility. This is normalization, not a rejecting enum.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "visibility"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      "start",
                      "visibility"
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 634,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "news_and_tricks": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 644,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_create_admin": {
                  "description": "Integer-casts the input. Modes 1 and 2 remain selected; all other inputs normalize to disabled 0. Readback uses false for disabled.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    1
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      0,
                      1,
                      2
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 653,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_userlogin": {
                  "description": "PHP integer-casts the input; 2, 3 and 4 remain their numeric modes, other inputs become 1. The mode list describes normalized output, not a rejecting input enum.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    1
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      1,
                      2,
                      3,
                      4
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 686,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_login": {
                  "description": "Integer-casts input: 2 stores y, 3 stores p, all other values store n. Response maps n/y/p to 1/2/3 and unmatched stored values to null.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    1
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      1,
                      2,
                      3
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 713,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_login_global_users": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 738,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_cancellation": {
                  "description": "PHP integer-casts the input; 2, 3 and 4 remain their numeric modes, other inputs become 1. The mode list describes normalized output, not a rejecting input enum.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    1
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      1,
                      2,
                      3,
                      4
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 757,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_cancellation_admin_confirmation_mail": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 784,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_reservation": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 803,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_paymentpage": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 812,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_sendinfo": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 822,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_label_notifications": {
                  "description": "Non-array input becomes []. For each rule: trim a nonempty label of at most 15 characters, retain its first occurrence, require a PHP-valid email and a selected-account custom non-PDF email template. Invalid/duplicate entries are skipped, not a whole-field rejection. Storage uses internal template IDs only; response emits public emailtemplate v2 IDs.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    []
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "label",
                        "email",
                        "emailtemplate"
                      ],
                      "properties": {
                        "label": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 15
                        },
                        "email": {
                          "type": "string"
                        },
                        "emailtemplate": {
                          "type": "string",
                          "pattern": "^emailtemplate_[a-f0-9]{12}_-?[0-9]+$"
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "x-edoobox-preconditions": [
                    "The referenced template must already exist for this account; empty [] is a valid disabling input."
                  ],
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 831,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 3060,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Actual rule filtering and per-account template lookup."
                    },
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 3105,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Response filter emits typed public emailtemplate IDs."
                    },
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 3159,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Template must belong to the account and be an email template, not PDF."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_send_pdf": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 850,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_send_ics": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 859,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_reminder": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 878,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_reminder_hours": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 887,
                  "x-edoobox-canonicalType": "integer",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    1
                  ]
                },
                "booking_visitconfirmation": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 902,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_number": {
                  "description": "The hook integer-casts the supplied value, rejects results outside 1..999999999, and rejects an already-used booking number in the selected account. A successful update stores the counter; coercible text is accepted, so a rejecting integer wire type would be inaccurate.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    100001
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 999999999
                  },
                  "x-edoobox-preconditions": [
                    "The chosen number must not already occur in the selected account."
                  ],
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 937,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Settingsfunc.php",
                      "line": 288,
                      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
                      "reason": "Actual hook range check and tenant-scoped uniqueness query."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_cert_percent": {
                  "description": "Integer-casts then clamps to 0 through 100. Out-of-range/coercible input is normalized instead of rejected. The response setter integer-casts stored rows; malformed legacy rows are not clamped on read.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    50
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 948,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_cert_notvisitmail": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 975,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_cert_senddelayhours": {
                  "description": "Integer-casts then clamps to 0 through 1440. Out-of-range/coercible input is normalized instead of rejected. The response setter integer-casts stored rows; malformed legacy rows are not clamped on read.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    50
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1440
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 996,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_cert_validation_url": {
                  "description": "Loose PHP comparison to true controls enable/disable. Enabling verifies the certificate_validation subscription feature; disabling bypasses that enablement check. Writes the certificate-validation flag.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    false
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "boolean"
                  },
                  "x-edoobox-preconditions": [
                    "An enabled subscription feature is an account-dependent runtime precondition, not an unconditional JSON requirement."
                  ],
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1024,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Settingsfunc.php",
                      "line": 40,
                      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
                      "reason": "Actual field hook handles loose truthiness and subscription verification."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_cert_attachpdf": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1046,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_cert_attachpdfpercent": {
                  "description": "Integer-casts then clamps to 0 through 100. Out-of-range/coercible input is normalized instead of rejected. The response setter integer-casts stored rows; malformed legacy rows are not clamped on read.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    50
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1206,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_cert_secondemail": {
                  "description": "Getter maps PHP truthiness to integer enable/disable. Disabling always updates the flag. Enabling requires an existing stored destination field, or a supplied recognized booking_cert_secondemail_field public field key. A missing/unrecognized destination returns false from the hook. The companion field is conditionally required based on stored account state, not on every request.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    false
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "boolean"
                  },
                  "x-edoobox-preconditions": [
                    "When no destination is stored, enabling requires booking_cert_secondemail_field in the same data object."
                  ],
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1094,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Settingsfunc.php",
                      "line": 641,
                      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
                      "reason": "Actual conditional second-email flag hook; getter called explicitly and destination checked against stored settings."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_cert_secondemail_field": {
                  "description": "A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. An unknown scalar key clears it; readback is false when empty, a public key when recognized, and null for unmatched legacy columns. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "email"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "status",
                          "gender",
                          "first_name",
                          "last_name",
                          "street",
                          "postcode",
                          "location",
                          "country",
                          "language",
                          "phone_number",
                          "email",
                          "company",
                          "data_1",
                          "data_2",
                          "data_3",
                          "data_4",
                          "data_5",
                          "data_6",
                          "data_7",
                          "data_8",
                          "data_9",
                          "data_10",
                          "data_11",
                          "data_12",
                          "data_13",
                          "data_14",
                          "data_15",
                          "data_16",
                          "data_17",
                          "data_18",
                          "data_19",
                          "data_20",
                          "data_21",
                          "data_22",
                          "data_23",
                          "data_24",
                          "data_25",
                          "data_26",
                          "data_27",
                          "data_28",
                          "data_29",
                          "data_30"
                        ]
                      },
                      {
                        "const": false
                      }
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1115,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Datastructure.php",
                      "line": 20,
                      "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
                      "reason": "Public field-key to storage-column map; this selector is not a database record ID."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_secondemail": {
                  "description": "Getter maps PHP truthiness to integer enable/disable. Disabling always updates the flag. Enabling requires an existing stored destination field, or a supplied recognized booking_secondemail_field public field key. A missing/unrecognized destination returns false from the hook. The companion field is conditionally required based on stored account state, not on every request.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    false
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "boolean"
                  },
                  "x-edoobox-preconditions": [
                    "When no destination is stored, enabling requires booking_secondemail_field in the same data object."
                  ],
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1150,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Settingsfunc.php",
                      "line": 693,
                      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f",
                      "reason": "Actual conditional second-email flag hook; getter called explicitly and destination checked against stored settings."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_secondemail_field": {
                  "description": "A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. An unknown scalar key clears it; readback is false when empty, a public key when recognized, and null for unmatched legacy columns. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "email"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "status",
                          "gender",
                          "first_name",
                          "last_name",
                          "street",
                          "postcode",
                          "location",
                          "country",
                          "language",
                          "phone_number",
                          "email",
                          "company",
                          "data_1",
                          "data_2",
                          "data_3",
                          "data_4",
                          "data_5",
                          "data_6",
                          "data_7",
                          "data_8",
                          "data_9",
                          "data_10",
                          "data_11",
                          "data_12",
                          "data_13",
                          "data_14",
                          "data_15",
                          "data_16",
                          "data_17",
                          "data_18",
                          "data_19",
                          "data_20",
                          "data_21",
                          "data_22",
                          "data_23",
                          "data_24",
                          "data_25",
                          "data_26",
                          "data_27",
                          "data_28",
                          "data_29",
                          "data_30"
                        ]
                      },
                      {
                        "const": false
                      }
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1171,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Datastructure.php",
                      "line": 20,
                      "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
                      "reason": "Public field-key to storage-column map; this selector is not a database record ID."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_offerlist_secondemail_field": {
                  "description": "A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. An unknown scalar key clears it; readback is false when empty, a public key when recognized, and null for unmatched legacy columns. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "email"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "status",
                          "gender",
                          "first_name",
                          "last_name",
                          "street",
                          "postcode",
                          "location",
                          "country",
                          "language",
                          "phone_number",
                          "email",
                          "company",
                          "data_1",
                          "data_2",
                          "data_3",
                          "data_4",
                          "data_5",
                          "data_6",
                          "data_7",
                          "data_8",
                          "data_9",
                          "data_10",
                          "data_11",
                          "data_12",
                          "data_13",
                          "data_14",
                          "data_15",
                          "data_16",
                          "data_17",
                          "data_18",
                          "data_19",
                          "data_20",
                          "data_21",
                          "data_22",
                          "data_23",
                          "data_24",
                          "data_25",
                          "data_26",
                          "data_27",
                          "data_28",
                          "data_29",
                          "data_30"
                        ]
                      },
                      {
                        "const": false
                      }
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1233,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Datastructure.php",
                      "line": 20,
                      "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
                      "reason": "Public field-key to storage-column map; this selector is not a database record ID."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "booking_offerlist_cancel_mail": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1268,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_allow_promotions": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1288,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "booking_designation_promotions": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 50,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 1297
                },
                "skip_counter": false,
                "question_deliverables_show": false,
                "multi_offer_show": false,
                "multi_offer_child_limit": false,
                "automatic_deletion": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1367,
                  "x-edoobox-canonicalType": "integer",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    1
                  ]
                },
                "edsupport_access": {
                  "description": "true or string true becomes 1; false, string false, null and empty string become 0; otherwise positive integer-cast values are retained, nonpositive values become 0. The getter does not reject noncanonical types.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    false
                  ],
                  "x-edoobox-canonicalSchema": {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "integer",
                        "minimum": 0
                      }
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1395,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "payment_confirmation_mail": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1428,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "barcode_type": {
                  "x-edoobox-knownInputs": [
                    "pdf417",
                    "qrcode",
                    "datamatrix"
                  ],
                  "x-edoobox-normalization": "Switch default normalizes other input values; case labels are not an exhaustive accepted-input enum.",
                  "examples": [
                    "pdf417"
                  ],
                  "x-edoobox-sourceLine": 1437
                },
                "barcode_mobile_wallet": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1461,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "mobile_wallet_background_color": {
                  "description": "Trims/string-casts; six hexadecimal digits with optional # normalize to uppercase #RRGGBB. Empty or malformed values become '#0068B0'. No rejecting input pattern is applied.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "#12ab34"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "string"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1470,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 3181,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Shared color normalizer returns uppercase hex or the field-specific fallback."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "mobile_wallet_foreground_color": {
                  "description": "Trims/string-casts; six hexadecimal digits with optional # normalize to uppercase #RRGGBB. Empty or malformed values become ''. No rejecting input pattern is applied.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "#12ab34"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "string"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1479,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 3181,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Shared color normalizer returns uppercase hex or the field-specific fallback."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "mobile_wallet_use_offer_image": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1488,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "mobile_wallet_fallback_image_url": {
                  "description": "String-casts, strips HTML tags, trims and byte-truncates to 500 bytes. Despite the field name, no URL syntax or scheme validator is applied.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "https://example.invalid/support"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "string"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1497,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "mobile_wallet_display_name": {
                  "description": "String-casts, strips HTML tags, trims and byte-truncates to 150 bytes. The response setter only string-casts stored data.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "Example organization"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "string"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1506,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "mobile_wallet_support_url": {
                  "description": "String-casts, strips HTML tags, trims and byte-truncates to 500 bytes. Despite the field name, no URL syntax or scheme validator is applied.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "https://example.invalid/support"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "string"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1515,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "barcode_ticket": {
                  "x-edoobox-knownInputs": [
                    false,
                    "always",
                    "offer"
                  ],
                  "x-edoobox-normalization": "Switch default normalizes other input values; case labels are not an exhaustive accepted-input enum.",
                  "examples": [
                    false
                  ],
                  "x-edoobox-sourceLine": 1524
                },
                "collective_booking_max": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1548,
                  "x-edoobox-canonicalType": "integer",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    1
                  ]
                },
                "collective_booking_identify": {
                  "description": "A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. Unknown keys return null; readback is false when empty, a public key when recognized, and null for unmatched legacy columns. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "email"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "status",
                          "gender",
                          "first_name",
                          "last_name",
                          "street",
                          "postcode",
                          "location",
                          "country",
                          "language",
                          "phone_number",
                          "email",
                          "company",
                          "data_1",
                          "data_2",
                          "data_3",
                          "data_4",
                          "data_5",
                          "data_6",
                          "data_7",
                          "data_8",
                          "data_9",
                          "data_10",
                          "data_11",
                          "data_12",
                          "data_13",
                          "data_14",
                          "data_15",
                          "data_16",
                          "data_17",
                          "data_18",
                          "data_19",
                          "data_20",
                          "data_21",
                          "data_22",
                          "data_23",
                          "data_24",
                          "data_25",
                          "data_26",
                          "data_27",
                          "data_28",
                          "data_29",
                          "data_30"
                        ]
                      },
                      {
                        "const": false
                      }
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1563,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Datastructure.php",
                      "line": 20,
                      "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
                      "reason": "Public field-key to storage-column map; this selector is not a database record ID."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "collective_booking_identify_privacy": {
                  "description": "A false-like input clears the setting. A recognized public data field key is mapped to its internal column; internal column names must not be submitted. The clear sentinel is stored as NO; unknown keys store empty text. Readback is false for NO, a public key when recognized, and null otherwise. Arrays/objects are not valid PHP array keys and may produce an error; the canonical shape is a public key or false.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "email"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "status",
                          "gender",
                          "first_name",
                          "last_name",
                          "street",
                          "postcode",
                          "location",
                          "country",
                          "language",
                          "phone_number",
                          "email",
                          "company",
                          "data_1",
                          "data_2",
                          "data_3",
                          "data_4",
                          "data_5",
                          "data_6",
                          "data_7",
                          "data_8",
                          "data_9",
                          "data_10",
                          "data_11",
                          "data_12",
                          "data_13",
                          "data_14",
                          "data_15",
                          "data_16",
                          "data_17",
                          "data_18",
                          "data_19",
                          "data_20",
                          "data_21",
                          "data_22",
                          "data_23",
                          "data_24",
                          "data_25",
                          "data_26",
                          "data_27",
                          "data_28",
                          "data_29",
                          "data_30"
                        ]
                      },
                      {
                        "const": false
                      }
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1586,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/Datastructure.php",
                      "line": 20,
                      "sha256": "256cfd2c1002e4708b342b6649fa6bfda780273306c30ae2a43d424fd0e2e6a8",
                      "reason": "Public field-key to storage-column map; this selector is not a database record ID."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "collective_booking_identify_obligatory": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1610,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "collective_booking_master": {
                  "x-edoobox-knownInputs": [
                    "manual",
                    "all",
                    false
                  ],
                  "x-edoobox-normalization": "Switch default normalizes other input values; case labels are not an exhaustive accepted-input enum.",
                  "examples": [
                    "manual"
                  ],
                  "x-edoobox-sourceLine": 1673
                },
                "security_headers_csp": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1654,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "design_subcategory": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1699,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "legaltext_atc": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1708,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "legaltext_ri": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1717,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "legaltext_pp": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1726,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "attendance_config": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "status": {
                        "type": [
                          "number",
                          "string"
                        ],
                        "description": "Converted to integer by the callback."
                      },
                      "order": {
                        "type": [
                          "number",
                          "string"
                        ]
                      },
                      "counter": {},
                      "val": {},
                      "color": {},
                      "help": {}
                    },
                    "additionalProperties": true,
                    "required": [
                      "status"
                    ]
                  },
                  "description": "The converted statuses 0, 1 and 2 must each occur exactly once among processed items. Counter values outside 0..100 become 0. Extra statuses are supported; processing stops after 41 entries or on a missing status.",
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settingsfunc.php",
                      "line": 153,
                      "reason": "PUT sorts the status-record array, casts status/order and normalizes counter.",
                      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f"
                    },
                    {
                      "file": "application/models/v2/Settingsfunc.php",
                      "line": 208,
                      "reason": "Exactly three required-status occurrences are checked.",
                      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f"
                    },
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1739,
                      "reason": "Response returns ordered status records as a JSON array.",
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "language": {
                  "type": "object",
                  "properties": {
                    "active": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "additionalProperties": true,
                  "description": "Active language codes in desired order. Unknown codes are ignored. Account language configuration governs availability.",
                  "required": [
                    "active"
                  ],
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settingsfunc.php",
                      "line": 77,
                      "reason": "PUT expects an active language-code array inside an object.",
                      "sha256": "7a289d246c7c6b70fd88c739a308a883f0f983913cc06f6e04b160792aef3c4f"
                    },
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1759,
                      "reason": "The resource Structure response placeholder is false; enriched action responses may differ.",
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "edsubscription": false,
                "edsubscription_testinguntildate": false,
                "versions": false,
                "pdf_engine": {
                  "description": "PHP switch maps input mode 1 to dompdf; mode 2 and other inputs default to mpdf. Readback maps stored dompdf/mpdf to numeric 1/2, with null for unknown stored text.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    2
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      1,
                      2
                    ]
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1821,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "pdf_edit_restriction_password": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 1851,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "pdf_paper_size": {
                  "description": "Requires an exact installed library paper-size key after case folding, before aP trim/storage normalization. Unknown values return strict false from the getter and the final generic joined writer rejects ED80100 before joined persistence. The existing case-insensitive pattern reflects those installed meaningful paper-size strings; the own parent and relation predicates remain independently checked.",
                  "x-edoobox-schemaStatus": "source-reviewed-validation",
                  "examples": [
                    "a4"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "enum": [
                      "4a0",
                      "2a0",
                      "a0",
                      "a1",
                      "a2",
                      "a3",
                      "a4",
                      "a5",
                      "a6",
                      "a7",
                      "a8",
                      "a9",
                      "a10",
                      "b0",
                      "b1",
                      "b2",
                      "b3",
                      "b4",
                      "b5",
                      "b6",
                      "b7",
                      "b8",
                      "b9",
                      "b10",
                      "c0",
                      "c1",
                      "c2",
                      "c3",
                      "c4",
                      "c5",
                      "c6",
                      "c7",
                      "c8",
                      "c9",
                      "c10",
                      "ra0",
                      "ra1",
                      "ra2",
                      "ra3",
                      "ra4",
                      "sra0",
                      "sra1",
                      "sra2",
                      "sra3",
                      "sra4",
                      "letter",
                      "half-letter",
                      "legal",
                      "ledger",
                      "tabloid",
                      "executive",
                      "folio",
                      "commercial #10 envelope",
                      "catalog #10 1/2 envelope",
                      "8.5x11",
                      "8.5x14",
                      "11x17"
                    ]
                  },
                  "type": "string",
                  "pattern": "^(?:4[aA]0|2[aA]0|[aA]0|[aA]1|[aA]2|[aA]3|[aA]4|[aA]5|[aA]6|[aA]7|[aA]8|[aA]9|[aA]10|[bB]0|[bB]1|[bB]2|[bB]3|[bB]4|[bB]5|[bB]6|[bB]7|[bB]8|[bB]9|[bB]10|[cC]0|[cC]1|[cC]2|[cC]3|[cC]4|[cC]5|[cC]6|[cC]7|[cC]8|[cC]9|[cC]10|[rR][aA]0|[rR][aA]1|[rR][aA]2|[rR][aA]3|[rR][aA]4|[sS][rR][aA]0|[sS][rR][aA]1|[sS][rR][aA]2|[sS][rR][aA]3|[sS][rR][aA]4|[lL][eE][tT][tT][eE][rR]|[hH][aA][lL][fF]\\-[lL][eE][tT][tT][eE][rR]|[lL][eE][gG][aA][lL]|[lL][eE][dD][gG][eE][rR]|[tT][aA][bB][lL][oO][iI][dD]|[eE][xX][eE][cC][uU][tT][iI][vV][eE]|[fF][oO][lL][iI][oO]|[cC][oO][mM][mM][eE][rR][cC][iI][aA][lL]\\ \\#10\\ [eE][nN][vV][eE][lL][oO][pP][eE]|[cC][aA][tT][aA][lL][oO][gG]\\ \\#10\\ 1/2\\ [eE][nN][vV][eE][lL][oO][pP][eE]|8\\.5[xX]11|8\\.5[xX]14|11[xX]17)$",
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1870,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "vendor/dompdf/dompdf/src/Adapter/CPDF.php",
                      "line": 42,
                      "sha256": "7dca4a096b08c006f12bfccd733068223d92e502b9a625c49bd919373f714001",
                      "reason": "Installed Dompdf paper-size key list, matched case-insensitively by the source getter."
                    },
                    {
                      "file": "application/models/v2/API_DATA.php",
                      "line": 1853,
                      "sha256": "c0e15d26a7a4f3fb3c25e35557d4420ad395b2af3925caec292de08e32ebf44c",
                      "reason": "Normal fields check strict false; joined fields instead collect getter output at 1793 and execute it at 1827 without that rejection. Final joined writer rejects strict-false getters and unresolved/multi-join metadata before writes, anchors the joined row to the own parent (including account-key parents), and preserves constant join.where constraints as additional AND predicates. Join-only writes verify the own existing parent. Generic simple-owner hard/soft DELETE now verifies the own existing parent before hooks and repeats FID in DML; missing optional hook data no longer warns. Read, insert, signed authority and GET-effect classifications are unchanged."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "pdf_custom_css": {
                  "description": "Parses CSS, removes non-declaration blocks, keeps selectors starting .custom_ or *, and filters rule value node classes. font-family is retained only when a family is among Pdf::$fonts. Stores compact CSS base64; readback decodes/formats it or returns empty text. Parser errors and PDF renderer prerequisites are not a closed JSON Schema grammar.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    ".custom_example { color: #123456; }"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "string"
                  },
                  "x-edoobox-preconditions": [
                    "CSS parser grammar and configured font support are checked by source/parser, not replicated as a misleading JSON pattern."
                  ],
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1892,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/libraries/edoobox/integrations/pdf/Pdf.php",
                      "line": 16,
                      "sha256": "b286cdc4d20e02601db9acc35b06564357f10378961e72cb8f4e22e64b3a3254",
                      "reason": "Allowed PDF font keys used by the CSS normalizer."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "dinaco_client_id": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 250,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 1960
                },
                "dinaco_client_secret": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 250,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 1979
                },
                "gtm_mess_id": {
                  "description": "For input longer than five bytes, a non-anchored G-[a-zA-z0-9]{5,20} substring must occur or the value becomes empty. Short values are retained. aP then trims, replaces newlines and truncates. This is not a strict GA4-ID pattern validator.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "G-EXAMPLE1234"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "string"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 1998,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/helpers/edooboxhelp_helper.php",
                      "line": 11560,
                      "sha256": "090d351b5bde81813c7a829bedf2f1f9f978fce5765f246989779f996198934e",
                      "reason": "aP normalization after the substring test."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "gtm_container_id": {
                  "x-edoobox-canonicalType": "string",
                  "x-edoobox-maxStoredLength": 250,
                  "x-edoobox-normalization": "The aP getter trims text, replaces newlines and limits the legacy escaped storage representation to maxStoredLength UTF-8 characters without splitting escape pairs; aQ decodes the stored representation. Non-string input becomes empty text. This getter limit is normalization, not a rejecting input maxLength or proof of a custom action hook or database column capacity.",
                  "examples": [
                    "Example"
                  ],
                  "x-edoobox-sourceLine": 2024
                },
                "meta_html": {
                  "description": "Parses supplied HTML and keeps only meta tags whose name is google-site-verification or facebook-domain-verification. Only their name/content attributes are serialized, then aP truncates to 250 stored characters. This is a lossy sanitizer, not a rejecting HTML schema.",
                  "x-edoobox-schemaStatus": "source-reviewed-normalization",
                  "examples": [
                    "<meta name=\"google-site-verification\" content=\"synthetic-verification\">"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "string"
                  },
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 2044,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "system_attachments_file_naming": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": {
                    "type": "object",
                    "properties": {},
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "description": "Map keyed by an emailtemplate public ID or ics. Each value maps language codes to file-name text. Filename characters and suffix are normalized; unknown templates/languages are ignored.",
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 2076,
                      "reason": "Input iterates template/ics keys and language-to-name objects; edid occurs on map keys.",
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
                    },
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 2106,
                      "reason": "Response maps stored keys back to public emailtemplate IDs or ics.",
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1"
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "website_integration": {
                  "enum": [
                    "iframe",
                    "wordpress"
                  ],
                  "x-edoobox-sourceLine": 2132
                },
                "website_url": {
                  "description": "Accepts empty string or a string accepted by PHP FILTER_VALIDATE_URL. Other values return strict false and API_DATA rejects the update. No restriction to HTTP/HTTPS is imposed by this getter.",
                  "x-edoobox-schemaStatus": "source-reviewed-validation",
                  "examples": [
                    "https://example.invalid"
                  ],
                  "x-edoobox-canonicalSchema": {
                    "type": "string"
                  },
                  "type": "string",
                  "x-edoobox-preconditions": [
                    "PHP FILTER_VALIDATE_URL is the rejecting syntax check; JSON Schema format:uri is not asserted as an exact equivalent."
                  ],
                  "x-edoobox-contractSource": [
                    {
                      "file": "application/models/v2/Settings.php",
                      "line": 2159,
                      "sha256": "431e6774611828ce07fb932ead801e3b2e3b7a15214e5d9498487b545c0d73f1",
                      "reason": "Structure input getter, response setter and update flags."
                    },
                    {
                      "file": "application/models/v2/API_DATA.php",
                      "line": 1853,
                      "sha256": "c0e15d26a7a4f3fb3c25e35557d4420ad395b2af3925caec292de08e32ebf44c",
                      "reason": "Strict false getter rejects invalid URL inputs. Final joined writer rejects strict-false getters and unresolved/multi-join metadata before writes, anchors the joined row to the own parent (including account-key parents), and preserves constant join.where constraints as additional AND predicates. Join-only writes verify the own existing parent. Generic simple-owner hard/soft DELETE now verifies the own existing parent before hooks and repeats FID in DML; missing optional hook data no longer warns. Read, insert, signed authority and GET-effect classifications are unchanged."
                    },
                    {
                      "file": "docs/openapi/reviews/settings-fields.json",
                      "line": 1,
                      "reason": "Field-level Settings source review and runtime limitations; source-executing offline regressions are separate evidence.",
                      "sha256": "ba623ac262f6f53eec7d494cd53d3c45f91f0eaa6e0d5757b869d71df6423aa5"
                    }
                  ]
                },
                "admin_custom_permissions": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 2172,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                },
                "admin_academic_title_use": {
                  "x-edoobox-schemaStatus": "source-inferred",
                  "x-edoobox-sourceLine": 2192,
                  "x-edoobox-canonicalType": "boolean",
                  "x-edoobox-normalization": "PHP coercion/normalization is applied by the Structure getter; its return type is not a rejecting wire-input type restriction.",
                  "examples": [
                    false
                  ]
                }
              },
              "additionalProperties": true,
              "description": "Source-declared fields; action-specific and account validation still apply.",
              "minProperties": 1,
              "x-edoobox-readOnlyFields": [
                "id",
                "congress_module",
                "root_category",
                "shortcut",
                "organization_country",
                "organization_currency",
                "skip_counter",
                "question_deliverables_show",
                "multi_offer_show",
                "multi_offer_child_limit",
                "edsubscription",
                "edsubscription_testinguntildate",
                "versions"
              ],
              "x-edoobox-clientRestriction": "Read-only fields are forbidden by this client contract to prevent silently ignored writes; the legacy API itself skips them. Explicit source-marked update context fields remain accepted for hook validation without changing their immutable database columns."
            },
            "id": {
              "type": "string",
              "pattern": "^[a-z0-9]+_[a-f0-9]{12}_-?[0-9]+$",
              "description": "Opaque edoobox v2 object ID returned by this account. Never send a raw database ID. The synthetic example is illustrative and is not a real record.",
              "examples": [
                "settings_012345abcdef_123456"
              ]
            }
          },
          "additionalProperties": true,
          "required": [
            "data"
          ]
        },
        "examples": {
          "request": {
            "summary": "Account-Einstellungen ändern",
            "value": {
              "data": {
                "organization_name": "Beispielorganisation",
                "firstweekday": 1,
                "automatic_deletion": 180
              }
            }
          }
        }
      }
    }
  },
  "x-edoobox-runtimeMutationGuard": true,
  "x-edoobox-documentationReview": {
    "file": "docs/openapi/operation-contracts/06-admin-settings.json",
    "notes": []
  },
  "x-edoobox-source": {
    "file": "application/models/v2/Settings.php",
    "method": "updateSettings",
    "line": 2324
  },
  "x-edoobox-documentationStatus": "reviewed",
  "x-edoobox-readOnly": false,
  "x-edoobox-safeForAutomation": false,
  "x-edoobox-permission": {
    "resource": "settings",
    "short": "setti",
    "checkedByDispatcher": true,
    "levels": [
      3,
      4
    ],
    "description": "Resource permission mapping from APIPermissions(), Authfunc::_getCheckJWT. Additional model/admin/plugin checks may apply; resources absent from api_permission do not acquire a fictitious scope."
  }
}