Missing and extra fields
Two rules that make integration forgiving, and one consequence you should know about.
A field the template wants but your payload omits renders empty. It is not an error. A field your payload carries but the template never reads is simply ignored. An under-sized or over-sized payload still produces a document.
So {{ vendor.price }} with no price in the
data leaves a blank where the number would be, and the request still answers
200.
The consequence: a misspelled field is not an error. Send
vendro instead of vendor and you get a document
with a gap, not a refusal — but not in silence: the answer carries the
warning TEMPLATE_FIELDS_MISSING (2104), naming what the template
wanted and did not get.
The payload of each request is also kept as received (for 12 months, and
never for a dataless call). Open Documents in the console,
click Details on the generation, and the page lists wanted by the template but absent and
sent but never read side by side — a typo shows up in the second
list immediately.
Case does not matter
Tag and payload casing need not agree. All of these are the same field:
template: {{ VendoR.Price }} {{ vendor.price }} {{ VENDOR.PRICE }}
payload: {"Vendor": {"PRICE": …}} {"vendor": {"price": …}}
Both sides are folded to lowercase before merging, loop names included:
{% for R in Forniture %} reads the
array forniture and {{ r.SITE }} reads
site on each item. Values are never touched — a company name keeps
its capitals.
The one thing to avoid is a payload that carries the same field in two
casings (Vendor and vendor together): that is
ambiguous, and the populated one wins rather than whichever came first.