@celigo/api-specs 0.2.170 → 0.2.172

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ai-agent.yml CHANGED
@@ -1232,7 +1232,7 @@ components:
1232
1232
  x-enumDescriptions:
1233
1233
  text: Free-form text response from the model.
1234
1234
  json_schema: Structured JSON output conforming to a defined schema.
1235
- blob: Binary data output for non-text content.
1235
+ blob: Image generation — the run calls the image generation tool and returns the stored image's `blobKey`, not `_text` or `_json`.
1236
1236
  default: text
1237
1237
  description: Output format type.
1238
1238
  schemaMode:
@@ -1454,11 +1454,6 @@ components:
1454
1454
  an object without a non-empty name fails with a
1455
1455
  missing-required-field error. String entries are the
1456
1456
  legacy form and stay valid.
1457
- allowedPrompts:
1458
- type: array
1459
- description: Specific prompts to allow from the MCP server (used for MCP prompt entries; all if omitted).
1460
- items:
1461
- type: string
1462
1457
  tool:
1463
1458
  type: object
1464
1459
  description: |
@@ -1601,7 +1596,7 @@ components:
1601
1596
  x-enumDescriptions:
1602
1597
  text: Free-form text response from the model.
1603
1598
  json_schema: Structured JSON output conforming to a defined schema.
1604
- blob: Binary data output for non-text content.
1599
+ blob: Image generation — the run returns the stored image's `blobKey`, not `_text` or `_json`.
1605
1600
  default: text
1606
1601
  schemaMode:
1607
1602
  type: string
@@ -1770,11 +1765,6 @@ components:
1770
1765
  description: Display description shown for the tool.
1771
1766
  required:
1772
1767
  - name
1773
- allowedPrompts:
1774
- type: array
1775
- description: Specific prompts to allow from the MCP server (used for MCP prompt entries; all if omitted).
1776
- items:
1777
- type: string
1778
1768
  tool:
1779
1769
  type: object
1780
1770
  description: Reference to a Celigo Tool resource, used when type is "tool".
@@ -2334,7 +2324,11 @@ components:
2334
2324
 
2335
2325
  **Simple Types (direct value mapping)**
2336
2326
  - `string`: Text values, converts other types to string representation
2337
- - `number`: Numeric values, attempts conversion from strings
2327
+ - `number`: Numeric values. Converts a numeric string (`"24"` → `24`,
2328
+ `"007"` → `7`) and leaves the field out for an empty string; a value
2329
+ holding letters or a thousands separator (`"1,250.00"`) fails the
2330
+ record with `non_parsable_string` (`<generate>: String contains alpha
2331
+ characters`)
2338
2332
  - `boolean`: True/false values, converts truthy/falsy values
2339
2333
 
2340
2334
  Dates are represented as strings — use `string` for date fields and
@@ -2377,8 +2371,14 @@ components:
2377
2371
  - |-
2378
2372
  Missing `dataType` is rejected at save with validation error
2379
2373
  `[mandatory_destination_datatype] Destination datatype is a
2380
- required field.` When in doubt, use `"string"` — it accepts
2381
- any source value and the runtime will coerce it.
2374
+ required field.`
2375
+ - |-
2376
+ Give each row the type the destination field expects; `"string"` is
2377
+ not a safe default. It accepts any source value, but sends a numeric
2378
+ source as text (`"24"`), which a destination that checks JSON types
2379
+ refuses. Map numeric destination fields as `number`, which fails a
2380
+ record (`non_parsable_string`) only when the value holds letters or a
2381
+ thousands separator.
2382
2382
  enum:
2383
2383
  - string
2384
2384
  - number
@@ -2390,7 +2390,7 @@ components:
2390
2390
  - objectarray
2391
2391
  x-enumDescriptions:
2392
2392
  string: Text values; converts other types to their string representation.
2393
- number: Numeric values; attempts conversion from strings.
2393
+ number: Numeric values; converts numeric strings, and fails the record (`non_parsable_string`) on letters or a thousands separator.
2394
2394
  boolean: True/false values; converts truthy/falsy values.
2395
2395
  object: Nested object built from child `mappings`, or copied whole with `extract` (not both).
2396
2396
  stringarray: Array of string values.
@@ -3418,7 +3418,11 @@ components:
3418
3418
 
3419
3419
  **Simple Types (direct value mapping)**
3420
3420
  - `string`: Text values, converts other types to string representation
3421
- - `number`: Numeric values, attempts conversion from strings
3421
+ - `number`: Numeric values. Converts a numeric string (`"24"` → `24`,
3422
+ `"007"` → `7`) and leaves the field out for an empty string; a value
3423
+ holding letters or a thousands separator (`"1,250.00"`) fails the
3424
+ record with `non_parsable_string` (`<generate>: String contains alpha
3425
+ characters`)
3422
3426
  - `boolean`: True/false values, converts truthy/falsy values
3423
3427
 
3424
3428
  Dates are represented as strings — use `string` for date fields and
@@ -3461,8 +3465,14 @@ components:
3461
3465
  - |-
3462
3466
  Missing `dataType` is rejected at save with validation error
3463
3467
  `[mandatory_destination_datatype] Destination datatype is a
3464
- required field.` When in doubt, use `"string"` — it accepts
3465
- any source value and the runtime will coerce it.
3468
+ required field.`
3469
+ - |-
3470
+ Give each row the type the destination field expects; `"string"` is
3471
+ not a safe default. It accepts any source value, but sends a numeric
3472
+ source as text (`"24"`), which a destination that checks JSON types
3473
+ refuses. Map numeric destination fields as `number`, which fails a
3474
+ record (`non_parsable_string`) only when the value holds letters or a
3475
+ thousands separator.
3466
3476
  enum:
3467
3477
  - string
3468
3478
  - number
@@ -3474,7 +3484,7 @@ components:
3474
3484
  - objectarray
3475
3485
  x-enumDescriptions:
3476
3486
  string: Text values; converts other types to their string representation.
3477
- number: Numeric values; attempts conversion from strings.
3487
+ number: Numeric values; converts numeric strings, and fails the record (`non_parsable_string`) on letters or a thousands separator.
3478
3488
  boolean: True/false values; converts truthy/falsy values.
3479
3489
  object: Nested object built from child `mappings`, or copied whole with `extract` (not both).
3480
3490
  stringarray: Array of string values.
@@ -4398,192 +4408,6 @@ components:
4398
4408
  - lookupName
4399
4409
  - required:
4400
4410
  - hardCodedValue
4401
- ResponseMapping:
4402
- type: object
4403
- description: |
4404
- Merges fields from a step's response back onto the in-flight record so
4405
- downstream steps can read them. Applies to both lookup steps
4406
- (`type: "export"`) and import steps (`type: "import"`); without it, the
4407
- step's response is discarded after the call.
4408
-
4409
- `fields` and `lists` are plain arrays — exactly the shape GET returns.
4410
-
4411
- Extract paths do NOT read the raw application response — the platform
4412
- wraps every response in a canonical per-record envelope first, and
4413
- extracts evaluate against that envelope:
4414
-
4415
- - **Lookup steps**: `{"statusCode": 200, "data": [<result records>],
4416
- "errors": []}` — `data` holds the records the lookup step returns,
4417
- AFTER the export's own `transform` and output `filter` have run, so
4418
- extracts must start from it and name transformed fields by their
4419
- transformed name: `data[0].name` copies a field of the first result,
4420
- `data` copies the whole result array. A bare result-record field name
4421
- (e.g. `name`) resolves to nothing and merges nothing, and so does the
4422
- raw response path a transform consumed. A lookup that groups its
4423
- results returns each group as an array inside `data`
4424
- (`"data": [[<row>, <row>]]`): `data[0][0].name` (or `data.0.0.name`)
4425
- reads the first row of the first group, and `data[0]` copies the group.
4426
- - **Import steps**: `{"id": "<destination record id>", "statusCode": 200,
4427
- "ignored": false, "errors": [], "_json": <raw destination response>,
4428
- ...<response body fields flattened at the root>}` — use `id` for the
4429
- destination-assigned id and `_json.<path>` (or the flattened
4430
- `<path>`) for fields inside the destination's response body. The full
4431
- envelope (including `id`) is present on real runs and in flow-builder
4432
- previews; flow TEST runs never execute imports, and their envelope is
4433
- built from the import's saved `mockResponse`, or from the placeholder
4434
- `{"id": "1234567890", "mockResponse": "replace me"}` (numbered
4435
- `1234567890-1`, `1234567890-2`, … when a page holds several records)
4436
- — an `extract: "id"` in a test run merges that mock id, never a
4437
- destination record id.
4438
-
4439
- An `extract` may also be a Handlebars expression. It evaluates against
4440
- the same envelope as a plain path, so every path inside `{{ }}` starts
4441
- where the plain paths start — `{{data.0.name}}`,
4442
- `{{#compare data.0.count "==" 1}}yes{{else}}no{{/compare}}`,
4443
- `{{#if data.length}}found{{/if}}` on a lookup; `{{_json.order.id}}` or
4444
- `{{id}}` on an import. Index arrays with dots inside Handlebars
4445
- (`data.0.name` or `data.[0].name`; `data[0].name` renders nothing), and
4446
- expect a string result (`"1"`, `"false"`). There is no `record` object in
4447
- this context: `{{record.<anything>}}` renders nothing. Prefer a plain
4448
- path when the value is simply copied.
4449
- x-celigo-ai-guidance:
4450
- - |-
4451
- Handlebars is allowed in `extract` but only rooted at the envelope —
4452
- `{{data.0.x}}` on a lookup, `{{_json.x}}` / `{{id}}` on an import. The
4453
- `record.` root belongs to import-mapping templates; here every
4454
- `{{record.…}}` form renders nothing, silently, and `{{data[0].x}}`
4455
- (bracket index inside Handlebars) renders nothing too. Use Handlebars
4456
- only for a derived value (a flag, a concatenation); copy values with a
4457
- plain path.
4458
- - |-
4459
- A lookup's `data[]` is the step's output after its `transform` and
4460
- `filter`, so author extracts against the transformed records — never
4461
- against the raw response the transform consumed, and never against a
4462
- saved `mockOutput` as stored (it is the raw response; the transform
4463
- runs on top of it in a test run).
4464
- - |-
4465
- Send `fields` and `lists` as bare arrays, exactly as GET returns them.
4466
- Never wrap either in an object (e.g. `"fields": {"type": [...]}`): the
4467
- API does not reject that shape — it returns 200 and silently persists
4468
- `fields: [null]` / `lists: [{"fields": []}]`, erasing the step's
4469
- response mappings.
4470
- - |-
4471
- responseMapping is fully replaced on PUT: omitting it resets the step
4472
- to empty `{"fields": [], "lists": []}`. Always send the complete
4473
- intended mapping for every step.
4474
- - |-
4475
- To carry several lookup results onto the record, use `extract: "data"`
4476
- (the whole result array) or a `lists` entry whose extracts use
4477
- `data[*].x` — never `data[*].x` in `fields[].extract`, which merges
4478
- nothing: the record simply never gains the field.
4479
- examples:
4480
- - fields:
4481
- - extract: id
4482
- generate: ContactId
4483
- lists: []
4484
- - fields:
4485
- - extract: data[0].customer.name
4486
- generate: customerName
4487
- lists:
4488
- - generate: matchedOrders
4489
- fields:
4490
- - extract: data[*].id
4491
- generate: orderId
4492
- - extract: data[*].total
4493
- generate: amount
4494
- properties:
4495
- fields:
4496
- type: array
4497
- description: |
4498
- Field mappings that copy individual values from the response
4499
- envelope onto the in-flight record.
4500
- items:
4501
- type: object
4502
- properties:
4503
- extract:
4504
- type: string
4505
- x-celigo-agent:
4506
- - handlebars
4507
- description: |
4508
- Path within the canonical response envelope to copy the value
4509
- from, or a Handlebars expression over that same envelope. For
4510
- lookup steps, paths start from the envelope's `data` array
4511
- (`data[0].x` and `data.0.x` are equivalent; `data` alone
4512
- copies every result) — a lookup result field written without
4513
- the `data` prefix resolves to nothing. For import steps, use
4514
- the envelope fields `id`, `statusCode`, `ignored`, `_json.<path>`
4515
- for the raw response body, or the body field itself at the
4516
- envelope root (`orderNumber` and `_json.orderNumber` read the
4517
- same value). A `[*]` wildcard is not honored here — `data[*].x`
4518
- merges nothing; iterate arrays with `lists` instead. Inside
4519
- Handlebars, index with dots (`{{data.0.x}}`, never
4520
- `{{data[0].x}}`) and never use a `record.` root.
4521
- examples:
4522
- - data[0].customer.name
4523
- - data.0.fields.Product Name
4524
- - data
4525
- - id
4526
- - _json.orderNumber
4527
- - '{{#if data.length}}found{{else}}missing{{/if}}'
4528
- generate:
4529
- type: string
4530
- description: |
4531
- Field path on the in-flight record where the extracted value
4532
- is stored, using dot notation for nesting. Downstream steps
4533
- read the value at this path.
4534
- examples:
4535
- - customerName
4536
- - supplierDetails.supplierName
4537
- - netsuite_order_id
4538
- lists:
4539
- type: array
4540
- description: |
4541
- Array mappings that build a target array on the in-flight record
4542
- from an array inside the response envelope — one output item per
4543
- element of the array the item extracts mark with `[*]` (`data[*].x`
4544
- for lookups, `_json.<arrayPath>[*].x` for imports); an empty source
4545
- array yields an empty target array. Not needed for one-to-many
4546
- (fan-out) merge-back, which uses plain field mappings.
4547
- items:
4548
- type: object
4549
- properties:
4550
- generate:
4551
- type: string
4552
- description: |
4553
- Array field created on the in-flight record to hold the
4554
- mapped items.
4555
- examples:
4556
- - orderItems
4557
- - addresses
4558
- - contacts
4559
- fields:
4560
- type: array
4561
- description: |
4562
- Field mappings applied to each item of the source array to
4563
- produce the corresponding target-array item.
4564
- items:
4565
- type: object
4566
- properties:
4567
- extract:
4568
- type: string
4569
- description: |
4570
- Full envelope path to the source value, with `[*]`
4571
- marking the array to iterate — `data[*].productId` for a
4572
- lookup, `_json.items[*].sku` for an import. A path without
4573
- `[*]` (e.g. `statusCode`) repeats the same envelope value
4574
- on every item; an item-relative name (`productId`)
4575
- resolves to nothing and produces empty objects.
4576
- examples:
4577
- - data[*].productId
4578
- - data[*].quantity
4579
- - _json.items[*].sku
4580
- generate:
4581
- type: string
4582
- description: Target field within each mapped array item.
4583
- examples:
4584
- - itemId
4585
- - qty
4586
- - unitPrice
4587
4411
  Filter:
4588
4412
  type: object
4589
4413
  description: |
@@ -4723,15 +4547,30 @@ components:
4723
4547
  - `"lessthan"`: Value is less than specified value (is less than)
4724
4548
  - `"lessthanequals"`: Value is less than or equal to specified value (is less than or equals)
4725
4549
  - `"startswith"`: String starts with specified prefix (starts with)
4550
+ - `"notstartswith"`: String does not start with specified prefix (does not start with)
4726
4551
  - `"endswith"`: String ends with specified suffix (ends with)
4552
+ - `"notendswith"`: String does not end with specified suffix (does not end with)
4727
4553
  - `"contains"`: String contains specified substring (contains)
4728
4554
  - `"doesnotcontain"`: String does not contain specified substring (does not contain)
4729
4555
  - `"empty"`: Field is missing or empty (is empty)
4730
4556
  - `"notempty"`: Field contains a value (is not empty)
4731
- - `"matches"`: Matches a regular expression (matches)
4732
-
4733
- `isempty`, `isnotempty` and `anyof` are not operators: they are refused with 422
4734
- "Invalid operation: <name>".
4557
+ - `"matches"`: Matches a regular expression, ignoring case (matches)
4558
+
4559
+ Operator names are case-insensitive: `NOTEMPTY` and `endsWith` work and are stored
4560
+ as sent. `isempty`, `isnotempty`, `anyof`, `notcontains`, `doesnotstartwith`,
4561
+ `doesnotendwith`, `notmatches`, `doesnotmatch` and `notequal` are not operators:
4562
+ they are refused with 422 "Invalid operation: <name>", with the name in lowercase,
4563
+ both when the filter is saved and by `POST /v1/processors/filter`. To negate a
4564
+ condition, wrap it in `not`.
4565
+
4566
+ The string comparisons (`equals`, `contains`, `startswith`, `endswith` and their
4567
+ negations) are case-sensitive; wrap the field in `lowercase` to compare without case.
4568
+ `matches` is not: every pattern is compiled with the flags `gi`, so `^paid$` also
4569
+ matches `PAID` and `[a-z]` matches capital letters. An inline flag such as `(?i)`
4570
+ makes the pattern invalid. The filter still saves, but in a run every record fails
4571
+ with `FILTER_EVALUATION_FAILED` ("Invalid regular expression: /(?i)…/gi: Invalid
4572
+ group"), and `POST /v1/processors/filter` refuses the call with 422 (live-verified
4573
+ 2026-10-22).
4735
4574
 
4736
4575
  **Logical Operators**
4737
4576
  - `"and"`: All conditions must be true
@@ -5280,7 +5119,7 @@ components:
5280
5119
 
5281
5120
  This value is used as a fallback when:
5282
5121
  1. The source value doesn't match any key in the map
5283
- 2. allowFailures is set to true
5122
+ 2. allowFailures is true or omitted
5284
5123
 
5285
5124
  Setting an appropriate default helps prevent flow failures due to unexpected
5286
5125
  values and provides predictable behavior for edge cases.
@@ -5290,8 +5129,10 @@ components:
5290
5129
  - Original value indicators: "{Original Value}", "No mapping found"
5291
5130
  - Neutral values: "Other", "N/A", "Miscellaneous"
5292
5131
 
5293
- If allowFailures is false, a record whose value is unmapped fails and the default
5294
- is ignored.
5132
+ A save refuses a default together with an explicit `allowFailures: false`
5133
+ (422 `Lookups with default set can not have allowFailures explicitly set to
5134
+ false.`): a lookup either fails a miss (`allowFailures: false`, no default) or
5135
+ falls back to its default.
5295
5136
  examples:
5296
5137
  - Unknown
5297
5138
  - Other
@@ -5299,7 +5140,8 @@ components:
5299
5140
  - Unmapped Value
5300
5141
  - '{Original Value}'
5301
5142
  x-celigo-ai-guidance:
5302
- - 'Omit this field entirely when no fallback value is intended: a miss the lookup lets through then leaves the mapped field out, and with `allowFailures: false` a miss fails the record whatever the default. An empty string is a value, not "no default" — the save accepts `default: ""`, and an allowed miss writes `""`.'
5143
+ - 'Omit this field entirely when no fallback value is intended: a miss the lookup lets through then leaves the mapped field out, and `allowFailures: false` (which a save refuses alongside a default) fails it. An empty string is a value, not "no default" — the save accepts `default: ""`, and an allowed miss writes `""`.'
5144
+ - A default sends every unmapped value with no error, so add the missing key to the map when the destination needs the real value; keys match the extracted value exactly (case, spacing and suffixes count), and a save replaces the whole map.
5303
5145
  allowFailures:
5304
5146
  type:
5305
5147
  - boolean
@@ -5956,8 +5798,14 @@ components:
5956
5798
  mappings:
5957
5799
  allOf:
5958
5800
  - $ref: '#/components/schemas/Mappings'
5959
- responseMapping:
5960
- $ref: '#/components/schemas/ResponseMapping'
5801
+ x-celigo-ai-guidance:
5802
+ - |-
5803
+ The mapped record is the agent's input: its `text` is sent as text, `record` as
5804
+ its JSON, and `files` (`[{name, blobKey}]`, blob keys from earlier in the same
5805
+ flow) as attachments. `conversationHistoryId` (at most 200
5806
+ characters) keeps one conversation per agent and id across runs. A record with
5807
+ none of `text`, `record` or `files` is sent whole, as JSON, so with no mappings a
5808
+ record's own top-level `text`, `record` or `files` field is its only input.
5961
5809
  inputContext:
5962
5810
  type: string
5963
5811
  enum:
@@ -5968,7 +5816,9 @@ components:
5968
5816
  envelope: The agent receives records wrapped in an envelope with metadata.
5969
5817
  description: |-
5970
5818
  Selects the data context that `mappings[].extract` evaluates against. With no
5971
- mappings the agent receives the entire record and `inputContext` is moot. `record`
5819
+ mappings the agent receives the entire record as JSON (or only the record's own
5820
+ top-level `text`, `record` or `files` fields, when it has any) and `inputContext`
5821
+ is moot. `record`
5972
5822
  (the default) extracts against the flat record; `envelope` extracts against the
5973
5823
  runtime envelope, which exposes the record alongside job, settings, and other
5974
5824
  run-time metadata (`$.record.field`, `$.settings.field`, etc.). Same contract as
@@ -6068,6 +5918,13 @@ components:
6068
5918
  _headers:
6069
5919
  type: object
6070
5920
  description: Mock response headers.
5921
+ blobKey:
5922
+ type: string
5923
+ description: |-
5924
+ Mock output of an agent with `blob` output (image generation:
5925
+ `openai.output.format.type` or `litellm.responseFormat.type` set to `blob`),
5926
+ which returns the stored image's key here. Unrelated to the import-level `blob`
5927
+ flag, which agents refuse.
6071
5928
  ResourceResponse:
6072
5929
  type: object
6073
5930
  description: Response
@@ -543,7 +543,11 @@ components:
543
543
 
544
544
  **Simple Types (direct value mapping)**
545
545
  - `string`: Text values, converts other types to string representation
546
- - `number`: Numeric values, attempts conversion from strings
546
+ - `number`: Numeric values. Converts a numeric string (`"24"` → `24`,
547
+ `"007"` → `7`) and leaves the field out for an empty string; a value
548
+ holding letters or a thousands separator (`"1,250.00"`) fails the
549
+ record with `non_parsable_string` (`<generate>: String contains alpha
550
+ characters`)
547
551
  - `boolean`: True/false values, converts truthy/falsy values
548
552
 
549
553
  Dates are represented as strings — use `string` for date fields and
@@ -586,8 +590,14 @@ components:
586
590
  - |-
587
591
  Missing `dataType` is rejected at save with validation error
588
592
  `[mandatory_destination_datatype] Destination datatype is a
589
- required field.` When in doubt, use `"string"` — it accepts
590
- any source value and the runtime will coerce it.
593
+ required field.`
594
+ - |-
595
+ Give each row the type the destination field expects; `"string"` is
596
+ not a safe default. It accepts any source value, but sends a numeric
597
+ source as text (`"24"`), which a destination that checks JSON types
598
+ refuses. Map numeric destination fields as `number`, which fails a
599
+ record (`non_parsable_string`) only when the value holds letters or a
600
+ thousands separator.
591
601
  enum:
592
602
  - string
593
603
  - number
@@ -599,7 +609,7 @@ components:
599
609
  - objectarray
600
610
  x-enumDescriptions:
601
611
  string: Text values; converts other types to their string representation.
602
- number: Numeric values; attempts conversion from strings.
612
+ number: Numeric values; converts numeric strings, and fails the record (`non_parsable_string`) on letters or a thousands separator.
603
613
  boolean: True/false values; converts truthy/falsy values.
604
614
  object: Nested object built from child `mappings`, or copied whole with `extract` (not both).
605
615
  stringarray: Array of string values.
@@ -1627,7 +1637,11 @@ components:
1627
1637
 
1628
1638
  **Simple Types (direct value mapping)**
1629
1639
  - `string`: Text values, converts other types to string representation
1630
- - `number`: Numeric values, attempts conversion from strings
1640
+ - `number`: Numeric values. Converts a numeric string (`"24"` → `24`,
1641
+ `"007"` → `7`) and leaves the field out for an empty string; a value
1642
+ holding letters or a thousands separator (`"1,250.00"`) fails the
1643
+ record with `non_parsable_string` (`<generate>: String contains alpha
1644
+ characters`)
1631
1645
  - `boolean`: True/false values, converts truthy/falsy values
1632
1646
 
1633
1647
  Dates are represented as strings — use `string` for date fields and
@@ -1670,8 +1684,14 @@ components:
1670
1684
  - |-
1671
1685
  Missing `dataType` is rejected at save with validation error
1672
1686
  `[mandatory_destination_datatype] Destination datatype is a
1673
- required field.` When in doubt, use `"string"` — it accepts
1674
- any source value and the runtime will coerce it.
1687
+ required field.`
1688
+ - |-
1689
+ Give each row the type the destination field expects; `"string"` is
1690
+ not a safe default. It accepts any source value, but sends a numeric
1691
+ source as text (`"24"`), which a destination that checks JSON types
1692
+ refuses. Map numeric destination fields as `number`, which fails a
1693
+ record (`non_parsable_string`) only when the value holds letters or a
1694
+ thousands separator.
1675
1695
  enum:
1676
1696
  - string
1677
1697
  - number
@@ -1683,7 +1703,7 @@ components:
1683
1703
  - objectarray
1684
1704
  x-enumDescriptions:
1685
1705
  string: Text values; converts other types to their string representation.
1686
- number: Numeric values; attempts conversion from strings.
1706
+ number: Numeric values; converts numeric strings, and fails the record (`non_parsable_string`) on letters or a thousands separator.
1687
1707
  boolean: True/false values; converts truthy/falsy values.
1688
1708
  object: Nested object built from child `mappings`, or copied whole with `extract` (not both).
1689
1709
  stringarray: Array of string values.
@@ -2825,7 +2845,7 @@ components:
2825
2845
 
2826
2846
  This value is used as a fallback when:
2827
2847
  1. The source value doesn't match any key in the map
2828
- 2. allowFailures is set to true
2848
+ 2. allowFailures is true or omitted
2829
2849
 
2830
2850
  Setting an appropriate default helps prevent flow failures due to unexpected
2831
2851
  values and provides predictable behavior for edge cases.
@@ -2835,8 +2855,10 @@ components:
2835
2855
  - Original value indicators: "{Original Value}", "No mapping found"
2836
2856
  - Neutral values: "Other", "N/A", "Miscellaneous"
2837
2857
 
2838
- If allowFailures is false, a record whose value is unmapped fails and the default
2839
- is ignored.
2858
+ A save refuses a default together with an explicit `allowFailures: false`
2859
+ (422 `Lookups with default set can not have allowFailures explicitly set to
2860
+ false.`): a lookup either fails a miss (`allowFailures: false`, no default) or
2861
+ falls back to its default.
2840
2862
  examples:
2841
2863
  - Unknown
2842
2864
  - Other
@@ -2844,7 +2866,8 @@ components:
2844
2866
  - Unmapped Value
2845
2867
  - '{Original Value}'
2846
2868
  x-celigo-ai-guidance:
2847
- - 'Omit this field entirely when no fallback value is intended: a miss the lookup lets through then leaves the mapped field out, and with `allowFailures: false` a miss fails the record whatever the default. An empty string is a value, not "no default" — the save accepts `default: ""`, and an allowed miss writes `""`.'
2869
+ - 'Omit this field entirely when no fallback value is intended: a miss the lookup lets through then leaves the mapped field out, and `allowFailures: false` (which a save refuses alongside a default) fails it. An empty string is a value, not "no default" — the save accepts `default: ""`, and an allowed miss writes `""`.'
2870
+ - A default sends every unmapped value with no error, so add the missing key to the map when the destination needs the real value; keys match the extracted value exactly (case, spacing and suffixes count), and a save replaces the whole map.
2848
2871
  allowFailures:
2849
2872
  type:
2850
2873
  - boolean