@celigo/api-specs 0.2.171 → 0.2.173

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/flow.yml CHANGED
@@ -440,8 +440,10 @@ paths:
440
440
  PATCH is safer than PUT for toggling `disabled` or arming debug logging because it won't
441
441
  accidentally reset other fields. To arm debug logging, `replace` `/logging/debugUntil` with
442
442
  a future ISO timestamp (up to the plan's cap, `logging.maxDebugDuration` minutes on the license
443
- from `GET /v1/licenses`); to
444
- disarm, set it to a past timestamp or null.
443
+ from `GET /v1/licenses`). To disarm it, `remove` `/logging/debugUntil`. A `replace` with a
444
+ past timestamp is refused with 422 ("Debug logging end time must be in the future.") and
445
+ leaves the window open, so to end a window early with `replace` alone, set a time a few
446
+ seconds ahead.
445
447
  operationId: patchFlow
446
448
  tags:
447
449
  - Flows
@@ -475,6 +477,11 @@ paths:
475
477
  - op: replace
476
478
  path: /logging/debugUntil
477
479
  value: '2026-05-02T16:00:00.000Z'
480
+ disable_debug:
481
+ summary: Turn debug logging off before the window ends
482
+ value:
483
+ - op: remove
484
+ path: /logging/debugUntil
478
485
  update_schedule:
479
486
  summary: Change Celigo 6-field schedule cron
480
487
  value:
@@ -1996,7 +2003,7 @@ paths:
1996
2003
  value:
1997
2004
  errors:
1998
2005
  - code: inactive_flow
1999
- message: The flow is currently disabled and cannot process retries.
2006
+ message: The flow is inactive. Please enable the flow before retrying.
2000
2007
  missing_last_error_at:
2001
2008
  summary: selectAll without lastErrorAt
2002
2009
  value:
@@ -3523,7 +3530,22 @@ paths:
3523
3530
  '401':
3524
3531
  $ref: '#/components/responses/401-unauthorized'
3525
3532
  '404':
3526
- $ref: '#/components/responses/404-not-found'
3533
+ description: |-
3534
+ Flow not found ("The flow <_id> does not belong to the user <userId>."). The
3535
+ same answer comes back for a flow that exists and has page generators but no page
3536
+ processor or router yet, even when `_exportId` names one of its page generators: give it
3537
+ a step after the export before test-running it. (An `_exportId` that isn't one of the
3538
+ flow's page generators is the 400.)
3539
+ content:
3540
+ application/json:
3541
+ schema:
3542
+ $ref: '#/components/schemas/Error'
3543
+ examples:
3544
+ not_found:
3545
+ summary: Unknown flow id, or a flow with no page processor or router
3546
+ value:
3547
+ errors:
3548
+ - message: The flow 5f8d43a1b9e5a80011a35f2c does not belong to the user 60a2c4e6f321d800129a1a3c.
3527
3549
  '422':
3528
3550
  $ref: '#/components/responses/422-unprocessable-entity'
3529
3551
  /v1/flows/{_id}/test/run/{runId}/{_stepId}:
@@ -4577,7 +4599,22 @@ components:
4577
4599
  properties:
4578
4600
  postResponseMap:
4579
4601
  type: object
4580
- description: Hook that runs after the step's response mapping completes.
4602
+ description: |-
4603
+ Hook that runs after the step's response mapping completes. The function receives
4604
+ `options.postResponseMapData` (the records, with response mapping applied) and
4605
+ `options.responseData` (the step's per-record results, in the same order) and returns
4606
+ `postResponseMapData`, same length. A record an import step failed is in neither array
4607
+ unless `proceedOnFailure` is true. Then it is included, without the fields response
4608
+ mapping would have added, and its `responseData` entry has `statusCode` 422 and
4609
+ `errors` as an object keyed by index (`"0"`, `"1"`, ...) rather than an array. A
4610
+ successful entry has no `errors`.
4611
+ x-celigo-ai-guidance:
4612
+ - |-
4613
+ Verified live 2026-10-22 in flow runs of an HTTP import, three records with one
4614
+ answered 404: with `proceedOnFailure` unset, both arrays held the two written
4615
+ records; with `proceedOnFailure: true` they held all three, and a hook that called
4616
+ `.map` on each entry's `errors` threw on the failed one, failing the page. Read
4617
+ errors with `Object.values(entry.errors || {})`.
4581
4618
  properties:
4582
4619
  function:
4583
4620
  type: string
@@ -5523,6 +5560,17 @@ components:
5523
5560
  into a schedule (for example all wildcards, `? * * ? * *`), `422
5524
5561
  schedule_not_supported` when its runs would be less than a minute apart — which
5525
5562
  is also what free text such as `every 5 minutes` produces.
5563
+
5564
+ A save can store a later minute than it was sent. A minute field that is 0, 15,
5565
+ 30 or 45, a list made only of those minutes, a range that starts at minute 0, or a
5566
+ `*/N` step with N above 5 is stored 5 minutes later: `? 0 6 ? * *` as
5567
+ `? 5 6 ? * *`, `? 0,15,30,45 * ? * *` as `? 5,20,35,50 * ? * *`, `? 0-10 * ? * *`
5568
+ as `? 5-15 * ? * *`, and `? */15 * ? * *` as `? 5-59/15 * ? * *`. Any other minute
5569
+ field is kept as sent, including `? */5 * * * *` and lists that mix in other
5570
+ minutes (`? 0,10,20,30,40,50 * ? * *`), and the other fields never change. POST,
5571
+ PUT and PATCH all store it this way, the response and later reads return the
5572
+ stored value, and scheduled runs start at the stored minutes, so a flow saved for
5573
+ 06:00 runs at 06:05 (live-verified 2026-10-22).
5526
5574
  x-celigo-ai-guidance:
5527
5575
  - |-
5528
5576
  Build `schedule` as a Celigo 6-field cron:
@@ -5544,20 +5592,22 @@ components:
5544
5592
  schedule (`? * * ? * *`) with 422 `invalid_value`. Fix or clear the schedule
5545
5593
  instead of disabling the flow to get past the error.
5546
5594
  - |-
5547
- Prefer explicit lists when AUTHORING a schedule — hourly or longer:
5548
- minute `5` with an explicit hour list
5595
+ When AUTHORING a schedule, read `schedule` back after the save and give
5596
+ the user the stored times, not the requested ones: a schedule written
5597
+ for minute 0, 15, 30 or 45 can be stored, and run, 5 minutes later (see
5598
+ the description), and an explicit list is moved the same way as a step
5599
+ form. Hourly or longer: minute `5` with an explicit hour list
5549
5600
  (`? 5 0,4,8,12,16,20 ? * *` = every 4 hours;
5550
- `? 5 9 ? * 1,2,3,4,5` = weekdays 9 AM; `? 5 0 ? * *` = daily);
5551
- sub-hourly: an explicit minute list with hour `*`
5552
- (`? 0,15,30,45 * ? * *` = every 15 minutes). Lists match the UI's
5553
- schedule builder and make fire times unambiguous — the scheduler can
5554
- offset step expressions (the UI's sub-hourly presets fire at minutes
5555
- 10/25/40/55).
5601
+ `? 5 9 ? * 1,2,3,4,5` = weekdays 9:05 AM; `? 5 0 ? * *` = daily at
5602
+ 00:05); sub-hourly: an explicit minute list with hour `*`
5603
+ (`? 5,20,35,50 * ? * *` = every 15 minutes) or a step form.
5556
5604
  - |-
5557
5605
  Wildcard/step/range forms (`? */5 * * * *`, `? 10-59/30 * * * *`) are
5558
5606
  valid and the scheduler runs them — never claim an existing schedule's
5559
5607
  format is invalid or the cause of missed runs, and never rewrite a
5560
- working schedule into a different format as a fix. A new scheduled
5608
+ working schedule into a different format as a fix. A minute stored 5
5609
+ minutes after the one written is the save's normal behavior, not a
5610
+ fault, and a rewritten schedule is stored the same way. A new scheduled
5561
5611
  instance is not started while a previous run of the flow is still in
5562
5612
  progress (boundaries skipped during a long run are by design); missed
5563
5613
  runs on an enabled, unchanged flow with nothing running are a
@@ -6655,7 +6705,12 @@ components:
6655
6705
  - '500'
6656
6706
  message:
6657
6707
  type: string
6658
- description: Human-readable message. Frequently a JSON string that the adaptor received as a response body.
6708
+ description: |-
6709
+ Human-readable message. Frequently a JSON string that the adaptor received as a response body.
6710
+ Stored cut to 500 characters: a longer message keeps its first 497 characters followed by
6711
+ `...`. A template parse error (`handlebars_template_parse_error`) repeats the whole template
6712
+ before its parse detail, so in a long template the detail is cut off; invoking the import
6713
+ (`POST /v1/imports/{_id}/invoke`) with the record returns the full message.
6659
6714
  examples:
6660
6715
  - '{"error":"Internal Server Error"}'
6661
6716
  oIndex:
@@ -6692,6 +6747,7 @@ components:
6692
6747
  x-celigo-ai-guidance:
6693
6748
  - Read the classification off the record; never infer it from the message text — the classifier is heuristic and identical messages can classify differently.
6694
6749
  - There is no setting, mapping, hook, or API that changes a classification; a wrong one is a Celigo Support matter.
6750
+ - '`parse` also covers a request URL template that names a field the record lacks (`handlebars_template_parse_error`, `Failed to generate request url from template: … Details: "<field>" not defined in the model.`). That is missing data, not template syntax: nothing was sent, a retry of the same record fails the same way, and the fix is the record or how the import routes it (see an HTTP import''s `relativeURI`).'
6695
6751
  classifiedBy:
6696
6752
  type: string
6697
6753
  description: '`auto` on every classified error; absent on unclassified ones.'
@@ -7364,7 +7420,11 @@ components:
7364
7420
  type: integer
7365
7421
  readOnly: true
7366
7422
  description: |-
7367
- Number of records skipped, for example by an import's ignore-existing or ignore-missing rule.
7423
+ Number of records skipped, by a filter or by an import's ignore-existing or ignore-missing
7424
+ rule. Records an import's filter skips count in that import's child job; records an export's
7425
+ output filter drops count in the export's child job, whose `numSuccess` then counts only the
7426
+ records that passed (an export that read 6 records and dropped 3 reads `numSuccess` 3,
7427
+ `numIgnore` 3; live-verified 2026-10-22). Filtered records raise no error.
7368
7428
  Summed across steps on a parent flow job; per step on a child job.
7369
7429
  examples:
7370
7430
  - 0
@@ -8072,16 +8132,18 @@ components:
8072
8132
  description: |-
8073
8133
  Execution stage whose data to return. `apiCall` holds the request and response an HTTP
8074
8134
  export or import sent. On a job whose `logMode` is `debug`, an export's transform and
8075
- output filter record under `transformation` and `outputFilter`, an import's mapping and
8076
- response mapping under `mapping` and `responseMapping`, and a script hook's `options` and
8135
+ output filter record under `transformation` and `outputFilter`, an import's filter (its
8136
+ `filter` field) under `inputFilter`, an import's mapping and response mapping under
8137
+ `mapping` and `responseMapping`, and a script hook's `options` and
8077
8138
  return value under its hook type plus `Hook` (`preSavePageHook`, `preMapHook`,
8078
8139
  `postMapHook`, `postSubmitHook`, `postResponseMapHook`), whatever the function is called;
8079
8140
  neither the bare hook name (`preMap`) nor `<functionName>Hook` returns them (live-verified
8080
- 2026-10-20).
8141
+ 2026-10-20; `inputFilter` 2026-10-22).
8081
8142
  examples:
8082
8143
  - apiCall
8083
8144
  - transformation
8084
8145
  - outputFilter
8146
+ - inputFilter
8085
8147
  - mapping
8086
8148
  - responseMapping
8087
8149
  - preSavePageHook
@@ -8114,8 +8176,11 @@ components:
8114
8176
 
8115
8177
  - `apiCall`: the request's method and URI and the response's status code. A job whose `logMode` is
8116
8178
  `detailed` or `debug` also records each side's headers and body; a `basic` job does not.
8117
- - `mapping`, `transformation`, `outputFilter`, `responseMapping`: a per-record entry carrying the
8118
- record's `recordId`, the stage's `input`, and its `output` (`outputFilter` has `success` instead).
8179
+ - `mapping`, `transformation`, `outputFilter`, `inputFilter`, `responseMapping`: a per-record entry
8180
+ carrying the record's `recordId`, the stage's `input`, and its `output`. The filter stages
8181
+ (`outputFilter` for an export's output filter, `inputFilter` for an import's filter) have
8182
+ `success` instead, `false` for a record the filter dropped (`inputFilter` live-verified
8183
+ 2026-10-22).
8119
8184
  - `preSavePageHook`, `preMapHook`, `postMapHook`, `postSubmitHook`: one entry for the record's whole
8120
8185
  group, with no `recordId`. `input` is a one-element array holding the `options` the hook received,
8121
8186
  and `output` holds what the hook returned.
@@ -1940,8 +1940,10 @@ components:
1940
1940
  - A dot path from the record root (e.g. `email`, `address.city`), read from the
1941
1941
  incoming record. A path that matches no field writes nothing.
1942
1942
  - Handlebars template (contains `{{`) for concatenation /
1943
- formatting / conditional logic (e.g.
1944
- `{{record.firstName}} {{record.lastName}}`).
1943
+ formatting / conditional logic (e.g. `{{firstName}} {{lastName}}`,
1944
+ `{{#if mobile}}{{mobile}}{{else}}{{phone}}{{/if}}`). The template reads the
1945
+ record's fields by bare name: `{{record.firstName}}` and `{{data.firstName}}`
1946
+ render nothing, so the field is left out even when the record has the value.
1945
1947
 
1946
1948
  A `$.` JSONPath (the Mapper 2.0 `mappings` syntax) reads nothing here, and a bare
1947
1949
  string is read as a field path, not a constant: set constants in `hardCodedValue`.
@@ -1982,8 +1984,9 @@ components:
1982
1984
  x-celigo-ai-guidance:
1983
1985
  - |-
1984
1986
  When true, skip this field entirely when ``extract`` / lookup
1985
- produces empty / null. Without this flag the destination field
1986
- receives null and may overwrite existing data.
1987
+ produces an empty string, null or nothing. Without this flag an
1988
+ empty string is written as ``""`` and null as null, either of which
1989
+ may overwrite existing data; a missing source is left out either way.
1987
1990
  immutable:
1988
1991
  type: boolean
1989
1992
  description: When true, the mapped value cannot be overwritten by later mapping steps.
@@ -2000,7 +2003,15 @@ components:
2000
2003
  type:
2001
2004
  - string
2002
2005
  - 'null'
2003
- description: Fallback value used when the extract yields no value.
2006
+ description: |-
2007
+ Fallback value written when the source value is an empty string, null or
2008
+ missing. Without a default, an empty string and null are written as they are
2009
+ and a missing field is left out.
2010
+ x-celigo-ai-guidance:
2011
+ - |-
2012
+ Use ``default``, not ``hardCodedValue``, for a fallback on a field that is
2013
+ sometimes empty: ``hardCodedValue`` is written on every record and replaces
2014
+ the values that exist.
2004
2015
  extractDateFormat:
2005
2016
  type: string
2006
2017
  description: Date format of the source value, used to parse it before conversion.
@@ -1300,15 +1300,30 @@ components:
1300
1300
  - `"lessthan"`: Value is less than specified value (is less than)
1301
1301
  - `"lessthanequals"`: Value is less than or equal to specified value (is less than or equals)
1302
1302
  - `"startswith"`: String starts with specified prefix (starts with)
1303
+ - `"notstartswith"`: String does not start with specified prefix (does not start with)
1303
1304
  - `"endswith"`: String ends with specified suffix (ends with)
1305
+ - `"notendswith"`: String does not end with specified suffix (does not end with)
1304
1306
  - `"contains"`: String contains specified substring (contains)
1305
1307
  - `"doesnotcontain"`: String does not contain specified substring (does not contain)
1306
1308
  - `"empty"`: Field is missing or empty (is empty)
1307
1309
  - `"notempty"`: Field contains a value (is not empty)
1308
- - `"matches"`: Matches a regular expression (matches)
1310
+ - `"matches"`: Matches a regular expression, ignoring case (matches)
1309
1311
 
1310
- `isempty`, `isnotempty` and `anyof` are not operators: they are refused with 422
1311
- "Invalid operation: <name>".
1312
+ Operator names are case-insensitive: `NOTEMPTY` and `endsWith` work and are stored
1313
+ as sent. `isempty`, `isnotempty`, `anyof`, `notcontains`, `doesnotstartwith`,
1314
+ `doesnotendwith`, `notmatches`, `doesnotmatch` and `notequal` are not operators:
1315
+ they are refused with 422 "Invalid operation: <name>", with the name in lowercase,
1316
+ both when the filter is saved and by `POST /v1/processors/filter`. To negate a
1317
+ condition, wrap it in `not`.
1318
+
1319
+ The string comparisons (`equals`, `contains`, `startswith`, `endswith` and their
1320
+ negations) are case-sensitive; wrap the field in `lowercase` to compare without case.
1321
+ `matches` is not: every pattern is compiled with the flags `gi`, so `^paid$` also
1322
+ matches `PAID` and `[a-z]` matches capital letters. An inline flag such as `(?i)`
1323
+ makes the pattern invalid. The filter still saves, but in a run every record fails
1324
+ with `FILTER_EVALUATION_FAILED` ("Invalid regular expression: /(?i)…/gi: Invalid
1325
+ group"), and `POST /v1/processors/filter` refuses the call with 422 (live-verified
1326
+ 2026-10-22).
1312
1327
 
1313
1328
  **Logical Operators**
1314
1329
  - `"and"`: All conditions must be true
@@ -1598,7 +1613,9 @@ components:
1598
1613
  x-celigo-refModel: scripts
1599
1614
  description: |
1600
1615
  Reference to the Script resource that contains the filtering logic. This must be a valid
1601
- ObjectId of a Script resource that exists in the system.
1616
+ ObjectId of a Script resource in this account: any other id fails the save with 422
1617
+ ("Only a script owned by the user or a script shared by the Integration App can be used
1618
+ at filter.script._scriptId.").
1602
1619
 
1603
1620
  The referenced script must contain the function specified in the `function` field
1604
1621
  and must be written to handle filtering specifically. The script receives
@@ -746,15 +746,30 @@ components:
746
746
  - `"lessthan"`: Value is less than specified value (is less than)
747
747
  - `"lessthanequals"`: Value is less than or equal to specified value (is less than or equals)
748
748
  - `"startswith"`: String starts with specified prefix (starts with)
749
+ - `"notstartswith"`: String does not start with specified prefix (does not start with)
749
750
  - `"endswith"`: String ends with specified suffix (ends with)
751
+ - `"notendswith"`: String does not end with specified suffix (does not end with)
750
752
  - `"contains"`: String contains specified substring (contains)
751
753
  - `"doesnotcontain"`: String does not contain specified substring (does not contain)
752
754
  - `"empty"`: Field is missing or empty (is empty)
753
755
  - `"notempty"`: Field contains a value (is not empty)
754
- - `"matches"`: Matches a regular expression (matches)
755
-
756
- `isempty`, `isnotempty` and `anyof` are not operators: they are refused with 422
757
- "Invalid operation: <name>".
756
+ - `"matches"`: Matches a regular expression, ignoring case (matches)
757
+
758
+ Operator names are case-insensitive: `NOTEMPTY` and `endsWith` work and are stored
759
+ as sent. `isempty`, `isnotempty`, `anyof`, `notcontains`, `doesnotstartwith`,
760
+ `doesnotendwith`, `notmatches`, `doesnotmatch` and `notequal` are not operators:
761
+ they are refused with 422 "Invalid operation: <name>", with the name in lowercase,
762
+ both when the filter is saved and by `POST /v1/processors/filter`. To negate a
763
+ condition, wrap it in `not`.
764
+
765
+ The string comparisons (`equals`, `contains`, `startswith`, `endswith` and their
766
+ negations) are case-sensitive; wrap the field in `lowercase` to compare without case.
767
+ `matches` is not: every pattern is compiled with the flags `gi`, so `^paid$` also
768
+ matches `PAID` and `[a-z]` matches capital letters. An inline flag such as `(?i)`
769
+ makes the pattern invalid. The filter still saves, but in a run every record fails
770
+ with `FILTER_EVALUATION_FAILED` ("Invalid regular expression: /(?i)…/gi: Invalid
771
+ group"), and `POST /v1/processors/filter` refuses the call with 422 (live-verified
772
+ 2026-10-22).
758
773
 
759
774
  **Logical Operators**
760
775
  - `"and"`: All conditions must be true
@@ -1044,7 +1059,9 @@ components:
1044
1059
  x-celigo-refModel: scripts
1045
1060
  description: |
1046
1061
  Reference to the Script resource that contains the filtering logic. This must be a valid
1047
- ObjectId of a Script resource that exists in the system.
1062
+ ObjectId of a Script resource in this account: any other id fails the save with 422
1063
+ ("Only a script owned by the user or a script shared by the Integration App can be used
1064
+ at filter.script._scriptId.").
1048
1065
 
1049
1066
  The referenced script must contain the function specified in the `function` field
1050
1067
  and must be written to handle filtering specifically. The script receives