Loading…
Loading…
SOAP and REST disagree on a lot of small things: how a date should look, whether a single-element list is an array, whether an absent value is null or omitted,…
SOAP and REST disagree on a lot of small things: how a date should look, whether a
single-element list is an array, whether an absent value is null or omitted, how a field
should be named, what an error body looks like. Each of those decisions is a conversion
option you control — with a sensible default out of the box. This page is the operator
reference for every option, its modes, and the resolution hierarchy.
Options are set under Settings → Conversion defaults (platform-wide) and overridden per service / operation / field where the UI exposes that tier. The generated OpenAPI v3 contract reflects your choices, so the documentation always matches the runtime behavior.
Every option resolves through a fixed precedence chain — the most specific setting wins:
System default → per-Service → per-Operation → per-Field → (hardcoded fallback)
(broadest) (most specific)
Two important facts about the tiers — they are not uniform across options:
Per-field overrides are authored in the mapping UI; see Field-level overrides.
The runtime exposes the options below. Defaults shown are the platform (system) defaults.
| | |
|---|---|
| What it controls | How xsd:date / xsd:dateTime values render in JSON. |
| Modes (format) | iso-8601-utc (default) · iso-8601-utc-strict · iso-8601-local · iso-8601-offset · epoch-millis · epoch-seconds · custom |
| Companion sub-fields | Custom pattern (when format = custom) · Timezone (utc / local / passthrough, default utc) · Local timezone (an IANA zone-id such as Asia/Jerusalem, only when timezone = local) |
| Tiers | System → Operation → Field. |
The per-field date/time override exposes all four sub-fields (format, custom pattern, timezone, local timezone) on one chip.
| | |
|---|---|
| What it controls | How numbers render, including large integers that exceed safe JSON precision. |
| Modes | as-number (default) · as-string · as-string-when-unsafe (numbers render as numbers unless they exceed JSON-safe integer precision, in which case they render as strings) |
| Tiers | System → Operation → Field. |
| | |
|---|---|
| What it controls | How boolean values are represented. |
| Modes | as-bool (default — JSON true/false) · as-int (1/0) |
| Tiers | System → Operation → Field. |
| Direction model | Bidirectional — request and response sides carry separate per-field overrides, both consulted at runtime. |
| | |
|---|---|
| What it controls | What an absent, xsi:nil, or empty value becomes in JSON. |
| Modes | as-null · as-empty-value · omit-field |
| Defaults | Request side: omit-field. Response side: as-null. |
| Tiers | System → Operation → Field. |
| Direction model | Bidirectional — separate request and response columns/chips. |
| | |
|---|---|
| What it controls | How a single-element list is represented. |
| Modes | always-array (default — a one-element list is still a JSON array) · collapse-when-single (a one-element list collapses to a scalar) |
| Tiers | System → Operation → Field. (Response side.) |
| | |
|---|---|
| What it controls | Text trimming / normalization. |
| Modes | preserve (default) · trim · collapse (collapse internal runs) · trim-ascii-only · collapse-ascii-only |
| Tiers | System → Operation → Field. (Response side.) |
The two *-ascii-only modes are opt-in variants that only normalize ASCII whitespace, leaving
non-ASCII whitespace (relevant to some non-Latin scripts) untouched.
| | |
|---|---|
| What it controls | How xsd:base64Binary / xsd:hexBinary members render. |
| Modes | passthrough (default) · base64 · hex · data-url |
| Companion sub-field | Data-URL MIME type (when mode = data-url) |
| Tiers | System → Operation → Field. (Response side.) |
| | |
|---|---|
| What it controls | How xsd:duration renders. |
| Modes | passthrough (default — ISO-8601 duration string) · seconds (total seconds) · components (a {days, hours, minutes, seconds} object) |
| Tiers | System → Operation → Field. (Response side.) |
| | |
|---|---|
| What it controls | What happens when a required field arrives empty. |
| Modes | permissive (default) · fail-with-502 |
| Tiers | System → Operation → Field. (Response side.) |
| | |
|---|---|
| What it controls | The naming style of JSON field names. |
| Modes | as-source (default) · camelCase · snake_case · kebab-case · PascalCase |
| Tiers | System → Operation → Field. (Response side.) |
xsi:type discriminator| | |
|---|---|
| What it controls | How a polymorphic xsi:type is represented in JSON. |
| Modes | strip (default — drop the type hint) · keep-as-meta (keep it as metadata) · discriminator-field (emit it as a named discriminator field) |
| Companion sub-field | Discriminator field name (when mode = discriminator-field) |
| Tiers | System → Operation → Field. (Response side.) |
| | |
|---|---|
| What it controls | The shape of the REST response body. |
| Modes | raw (default — the payload directly) · data-key-only (payload under a data key) · wrapped-with-meta (payload plus a metadata block) |
| Tiers | System → Operation. (Body-level — no per-field tier.) |
| | |
|---|---|
| What it controls | The JSON shape of a non-2xx / fault response. |
| Modes | s2r-default (default) · rfc7807 (RFC 7807 Problem Details) · flat · upstream-passthrough (the backend's error payload, unchanged) |
| Tiers | System → Operation. (Body-level — no per-field tier.) |
| | |
|---|---|
| What it controls | Key order in the response JSON. |
| Modes | as-schema (default — XSD declared order) · alphabetical · preserve-source (the order the backend returned) |
| Tiers | System → Operation. (Body-level — no per-field tier.) |
| | |
|---|---|
| What it controls | What happens to inbound <soap:Header> content. |
| Modes | drop (default — with a Security denylist) · expose-as-meta (in response metadata) · expose-as-http-headers |
| Tiers | System → Operation. (Body-level — no per-field tier.) |
| | |
|---|---|
| What it controls | The HTTP status a backend failure surfaces as. |
| Modes | propagate (default — map the fault to a 4xx/5xx) · mask-as-200 (return HTTP 200 with the fault in the body) |
| Tiers | System → Operation. (No per-field tier — it's a response-status decision.) |
In the generated OpenAPI v3 this surfaces as extension keys
(x-s2r-upstream-failure-status, x-s2r-failure-body-in-200).
| | |
|---|---|
| What it controls | Enforcement of the inbound request contract. |
| Modes | off · shadow (default — log would-be failures, do not reject) · enforce (reject non-conforming requests) |
| Tiers | System → Service. (One of only two options with a real per-service tier.) |
| | |
|---|---|
| What it controls | Contract checking of the backend response. |
| Modes | off · monitor (default — log would-be failures, do not reject) · enforce (reject non-conforming responses) |
| Tiers | System → Service. (One of only two options with a real per-service tier.) |
See Validation modes for how shadow/monitor lets you preview enforcement before you turn it on, and the per-field validation regexes that ride on top of these modes.
| | |
|---|---|
| What it controls | Whether the generated OpenAPI spec stamps the synthetic natural int32/int64 minimum/maximum bounds on integer fields. |
| Modes | emit (default) · omit |
| Tiers | System → Operation → Field. |
| Note | Documentation-only. This affects the generated OpenAPI spec, not the runtime payload conversion. |
One related setting is applied at onboarding time rather than per request:
notify-only (default) · notify-and-suggest
· auto-apply-silent · none, with an associated generic-regex template. This governs how
the platform treats string fields that arrive with no XSD pattern, during mapping
generation. It is not resolved per call at runtime.Each option is applied in two places, kept aligned: