@celigo/api-specs 0.2.149 → 0.2.151

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/tool.yml CHANGED
@@ -1124,7 +1124,13 @@ paths:
1124
1124
  properties:
1125
1125
  connections:
1126
1126
  type: array
1127
- description: Connection bindings, one per connection the Tool's steps reference.
1127
+ description: |-
1128
+ Connection bindings, one per connection the Tool's steps reference. Name the
1129
+ connection to run with in `_id`: a binding with only `_abstractId`, or with
1130
+ the connection in `_connectionId` instead, is refused with 422 "Invalid
1131
+ override at overrides.connections[0]. Connection override must include at
1132
+ least one of: _id, _borrowConcurrencyFromConnectionId,
1133
+ requiresEndUserCredentials."
1128
1134
  items:
1129
1135
  type: object
1130
1136
  required:
@@ -1224,9 +1230,12 @@ paths:
1224
1230
  $ref: '#/components/responses/404-not-found'
1225
1231
  '422':
1226
1232
  description: |-
1227
- A step failed, or the Tool was refused before any step ran because its branches
1228
- don't all merge back (`tool_dangling_branch`). Either way the response includes
1229
- `invocationId` when logging is active, so the run can be opened in the run history.
1233
+ A step failed, or the Tool was refused before any step ran: a connection binding is
1234
+ missing (`connection_not_overridden`) or has no `_id`, or its branches don't all merge
1235
+ back (`tool_dangling_branch`). A failed step answers 422 even when it has
1236
+ `proceedOnFailure: true`: the later steps still run, but the response carries the error,
1237
+ not the output. Either way the response includes `invocationId` when logging is active,
1238
+ so the run can be opened in the run history.
1230
1239
  content:
1231
1240
  application/json:
1232
1241
  schema:
@@ -1256,6 +1265,11 @@ paths:
1256
1265
  code: connection_not_overridden
1257
1266
  message: 'Missing connection overrides. The following connection IDs must be overridden: 6ab1f5657b3d01a9084253a5.'
1258
1267
  invocationId: 6ab1f5877cd5cdd66da1cc8b
1268
+ binding_without_id:
1269
+ summary: A connection binding without `_id`
1270
+ value:
1271
+ errors:
1272
+ - message: 'Invalid override at overrides.connections[0]. Connection override must include at least one of: _id, _borrowConcurrencyFromConnectionId, requiresEndUserCredentials.'
1259
1273
  /v1/tools/{_id}/invocations:
1260
1274
  get:
1261
1275
  x-internal: false
@@ -2399,10 +2413,16 @@ paths:
2399
2413
  `GET /v1/tools/{_id}/test/run/{runId}/{_stepId}` to inspect stage-by-stage
2400
2414
  results. The run id for follow-up calls is the `flowJob._id` value.
2401
2415
 
2402
- A test run is not free of outside calls: lookups call their sources live. Imports never
2403
- send; each returns its saved `mockResponse`, or a placeholder response when none is saved
2404
- (see `mockResponse` on imports). A second test run started while one is still running is
2405
- refused with `test_run_not_allowed`.
2416
+ A test run is not free of outside calls: a lookup export with no saved `mockOutput` calls
2417
+ its source live, and the run then saves that response on the export as its `mockOutput`
2418
+ (the export's `lastModified` changes). Every later test run that uses the export, from any
2419
+ Tool or API and whatever its input, answers that lookup from the saved `mockOutput` instead
2420
+ of calling the source: the lookup's `request` stage shows the request rendered from the new
2421
+ input, and its `response` stage holds the saved records. Remove `mockOutput` from the export
2422
+ to call the source again. `POST /v1/tools/{_id}/invoke` neither reads nor writes it. Imports
2423
+ never send; each returns its saved `mockResponse`, or a placeholder response when none is
2424
+ saved (see `mockResponse` on imports). A second test run started while one is still running
2425
+ is refused with `test_run_not_allowed`.
2406
2426
 
2407
2427
  Test runs are a separate, short-lived history from normal runs — capture
2408
2428
  any follow-up step or log details soon after the run completes.
@@ -6373,10 +6393,9 @@ components:
6373
6393
  mockInput:
6374
6394
  type: object
6375
6395
  description: |
6376
- Mock data for testing the tool's input processing.
6377
-
6378
- Provides sample input to test transformation logic and routing
6379
- without requiring live data. Maximum size: 1MB.
6396
+ Sample input saved with the tool. `POST /v1/tools/{_id}/test/run` doesn't read it:
6397
+ send it as that call's `input`, or the run starts from an empty record. Maximum
6398
+ size: 1MB.
6380
6399
  additionalProperties: true
6381
6400
  Output:
6382
6401
  type: object
@@ -6720,16 +6739,19 @@ components:
6720
6739
  items: {}
6721
6740
  examples:
6722
6741
  - - equals
6723
- - - get
6724
- - customerType
6742
+ - - string
6743
+ - - extract
6744
+ - customerType
6725
6745
  - premium
6726
6746
  - - and
6727
- - - exists
6728
- - - get
6729
- - orderId
6730
- - - greaterThan
6731
- - - get
6732
- - amount
6747
+ - - notempty
6748
+ - - string
6749
+ - - extract
6750
+ - orderId
6751
+ - - greaterthan
6752
+ - - number
6753
+ - - extract
6754
+ - amount
6733
6755
  - 1000
6734
6756
  nextRouterId:
6735
6757
  type: string
@@ -6780,9 +6802,11 @@ components:
6780
6802
  - 60a2c4e6f321d800129a1a3c
6781
6803
  proceedOnFailure:
6782
6804
  type: boolean
6783
- description: |
6784
- Whether to continue processing subsequent steps if this
6785
- processor fails.
6805
+ description: |-
6806
+ When true, the later steps and the output stage still run after this
6807
+ processor fails; when false, they're skipped. Either way a direct
6808
+ `POST /v1/tools/{_id}/invoke` answers 422 with the failed step's error,
6809
+ without the output.
6786
6810
  setupInProgress:
6787
6811
  type: boolean
6788
6812
  description: |
@@ -8519,7 +8543,12 @@ components:
8519
8543
  type: boolean
8520
8544
  description: |
8521
8545
  When true, uses iClient-managed OAuth credentials (clientId/clientSecret)
8522
- instead of the values in this configuration.
8546
+ instead of the values in this configuration. The iClient is the connection's
8547
+ `_iClientId` — on an HTTP connection `http._iClientId`, beside `auth`, not inside it —
8548
+ and it also supplies the grant type and the authorization and token endpoints, so a
8549
+ create needs only `auth.type: "oauth"`, `auth.oauth.useIClientFields: true` and the
8550
+ iClient id. The connection holds no tokens until a person completes the authorization
8551
+ in a browser.
8523
8552
  oauth1:
8524
8553
  type: object
8525
8554
  description: |-
@@ -8648,7 +8677,7 @@ components:
8648
8677
  x-celigo-ai-guidance:
8649
8678
  - |-
8650
8679
  ## OAUTH 2.0 GRANT TYPES
8651
- - "authorizationcode" — Authorization Code flow (browser-based user consent).
8680
+ - "authorizecode" — Authorization Code flow (browser-based user consent).
8652
8681
  Requires authURI, tokenURI, and user authorization via browser.
8653
8682
  - "clientcredentials" — Client Credentials flow (server-to-server, no user).
8654
8683
  Requires tokenURI, clientId, clientSecret.
@@ -9239,7 +9268,11 @@ components:
9239
9268
  description: |
9240
9269
  The API key or bearer token value (encrypted at rest); returned masked as `"******"`.
9241
9270
  On update, the mask sent back keeps the stored token; a new value replaces it.
9242
- Required unless automatic token refresh is configured.
9271
+ Required unless automatic token refresh is configured: a token block without a
9272
+ token must carry a `refreshMethod`, so a create or update that sends neither fails
9273
+ with 422 `Expected field: refreshMethod to be present.` To create a static-token
9274
+ connection before the real token is available, send a placeholder value and
9275
+ replace it later.
9243
9276
  examples:
9244
9277
  - my-api-token-EXAMPLE
9245
9278
  location:
@@ -11445,7 +11478,11 @@ components:
11445
11478
  description: |
11446
11479
  The API key or bearer token value (encrypted at rest); returned masked as `"******"`.
11447
11480
  On update, the mask sent back keeps the stored token; a new value replaces it.
11448
- Required unless automatic token refresh is configured.
11481
+ Required unless automatic token refresh is configured: a token block without a
11482
+ token must carry a `refreshMethod`, so a create or update that sends neither fails
11483
+ with 422 `Expected field: refreshMethod to be present.` To create a static-token
11484
+ connection before the real token is available, send a placeholder value and
11485
+ replace it later.
11449
11486
  examples:
11450
11487
  - my-api-token-EXAMPLE
11451
11488
  location:
@@ -22356,12 +22393,17 @@ components:
22356
22393
  run at `default` regardless of what's set here.
22357
22394
  output:
22358
22395
  type: object
22359
- description: Output format configuration
22396
+ description: |-
22397
+ Output format configuration. A guardrail stores `format` but doesn't use it: the
22398
+ request to the model always carries the guardrail's own `validation_result` JSON
22399
+ schema (`flagged`, `reasoning`, `confidence`), and the result returns `flagged` and
22400
+ `reasoning` whatever `format` holds.
22360
22401
  properties:
22361
22402
  format:
22362
22403
  type: object
22363
22404
  description: |
22364
- Controls the structure of the model's output.
22405
+ Stored output structure. The request to the model uses the guardrail's own
22406
+ verdict schema instead (see `output`).
22365
22407
  properties:
22366
22408
  type:
22367
22409
  type: string
@@ -22370,10 +22412,10 @@ components:
22370
22412
  - json_schema
22371
22413
  - blob
22372
22414
  x-enumDescriptions:
22373
- text: Free-form text response from the model.
22374
- json_schema: Structured JSON output conforming to a defined schema.
22375
- blob: Binary data output for non-text content.
22376
- description: Output format type.
22415
+ text: Stored format type; the model request still uses the guardrail's verdict schema.
22416
+ json_schema: A stored JSON schema (`jsonSchema`); the model request still uses the guardrail's verdict schema.
22417
+ blob: Stored format type; the model request still uses the guardrail's verdict schema.
22418
+ description: Output format type, as stored.
22377
22419
  schemaMode:
22378
22420
  type: string
22379
22421
  enum:
@@ -22383,9 +22425,9 @@ components:
22383
22425
  manual: The schema editor opens `jsonSchema` in the visual field-by-field view
22384
22426
  json: The schema editor opens `jsonSchema` in the raw JSON view
22385
22427
  description: |-
22386
- Which view a schema editor opens `jsonSchema` in; the schema sent to the
22387
- provider is the same either way. Stored and echoed on guardrails for parity
22388
- with the AI-agent format block — the guardrail form does not set it today.
22428
+ Which view a schema editor opens `jsonSchema` in. Stored and echoed on
22429
+ guardrails for parity with the AI-agent format block — the guardrail form
22430
+ does not set it today, and neither view changes the model request.
22389
22431
  x-celigo-ai-guidance:
22390
22432
  - |-
22391
22433
  Resend the stored value on every update — a full PUT that omits the field
@@ -22397,18 +22439,20 @@ components:
22397
22439
  x-celigo-ui-override: Required by the AI agent form when output format type is json_schema. Encoded here to mirror the form so builders produce connectable configurations.
22398
22440
  strict:
22399
22441
  type: boolean
22400
- description: When true, enforces strict schema validation on output.
22442
+ description: Stored strict-validation flag for `jsonSchema`. A guardrail's model request uses its own verdict schema, so this doesn't apply there.
22401
22443
  x-celigo-ai-guidance:
22402
- - Whether to enforce strict schema validation on output
22444
+ - Stored only on a guardrail; it doesn't change the guardrail's verdict.
22403
22445
  jsonSchema:
22404
22446
  type: object
22405
22447
  description: |
22406
- JSON Schema for structured output. Required when `format.type` is "json_schema".
22448
+ Stored JSON Schema. Required when `format.type` is "json_schema". A guardrail
22449
+ doesn't send it to the model; the request carries the `validation_result`
22450
+ verdict schema instead.
22407
22451
  x-celigo-ui-override: Required by the AI agent form when output format type is json_schema. Encoded here to mirror the form so builders produce connectable configurations.
22408
22452
  properties:
22409
22453
  type:
22410
22454
  type: string
22411
- description: Root JSON Schema type of the structured output; use "object" for record-shaped results.
22455
+ description: Root type of the stored JSON Schema.
22412
22456
  enum:
22413
22457
  - object
22414
22458
  - array
@@ -22426,15 +22470,15 @@ components:
22426
22470
  properties:
22427
22471
  type: object
22428
22472
  additionalProperties: true
22429
- description: JSON Schema definitions for each field the structured output may contain.
22473
+ description: Field definitions in the stored JSON Schema.
22430
22474
  required:
22431
22475
  type: array
22432
- description: Property names the model must include in the structured output.
22476
+ description: Property names the stored JSON Schema marks as required.
22433
22477
  items:
22434
22478
  type: string
22435
22479
  additionalproperties:
22436
22480
  type: boolean
22437
- description: When true, the structured output may include properties beyond those defined in `properties`.
22481
+ description: Whether the stored JSON Schema allows properties beyond those in `properties`.
22438
22482
  schema:
22439
22483
  type: object
22440
22484
  readOnly: true
@@ -23242,10 +23286,15 @@ components:
23242
23286
  type: boolean
23243
23287
  default: false
23244
23288
  description: |-
23245
- When true, detected PII is replaced with masked values.
23246
- When false, PII is flagged without modification.
23289
+ When true, the result also carries `masked`: the evaluated input with each detected
23290
+ value replaced by asterisks. The record itself is unchanged. With whole-record input
23291
+ (no `mapping`, and no top-level `text` field on the record), `masked` is the record
23292
+ serialized as one JSON string. When false, PII is flagged only.
23247
23293
  x-celigo-ai-guidance:
23248
- - Whether to mask detected PII values in the output.
23294
+ - |-
23295
+ Masking doesn't rewrite the record. To pass masked text on, select the field as the
23296
+ `text` input (`mapping`) and response-map `masked` back onto that field on the
23297
+ guardrail's flow step (`{"extract": "masked", "generate": "<field>"}`).
23249
23298
  moderation:
23250
23299
  type: object
23251
23300
  required:
@@ -23880,19 +23929,27 @@ components:
23880
23929
  properties:
23881
23930
  function:
23882
23931
  type: string
23883
- description: Function to invoke within the referenced script.
23932
+ description: |-
23933
+ Function to invoke: one in the script named by `_scriptId`, or one the code deployed on
23934
+ the stack named by `_stackId` exposes.
23884
23935
  examples:
23885
23936
  - transformRecords
23886
23937
  _scriptId:
23887
23938
  type: string
23888
23939
  format: objectId
23889
23940
  x-celigo-refModel: scripts
23890
- description: Script containing the hook function named in `function`.
23941
+ description: Script containing the hook function named in `function`. Send this or `_stackId`, not both.
23891
23942
  _stackId:
23892
23943
  type: string
23893
23944
  format: objectId
23894
23945
  x-celigo-refModel: stacks
23895
- description: Stack that hosts the hook logic, used instead of a script for stack-based deployments.
23946
+ description: |-
23947
+ Stack that hosts the hook logic, used instead of a script for stack-based deployments.
23948
+ The API doesn't enforce the either/or: a save carrying both `_scriptId` and `_stackId`
23949
+ answers 200 and stores both, and the script and the stack then each list the step as a
23950
+ dependent.
23951
+ x-celigo-ai-guidance:
23952
+ - When moving a hook onto a stack, remove `_scriptId` and set `function` to the stack's function in the same update.
23896
23953
  configuration:
23897
23954
  type:
23898
23955
  - object
@@ -25840,36 +25897,40 @@ components:
25840
25897
  Delta:
25841
25898
  type: object
25842
25899
  description: |-
25843
- Configures incremental exports that retrieve only records created or modified since the last
25844
- successful run. Required when the export's type is "delta"; omit for other export types.
25845
- The platform-managed last-successful-run timestamp (exposed as {{lastExportDateTime}}) is the
25846
- lower bound, and after a failed run the next run reuses the last successful timestamp so
25847
- changed records are not missed. A first run is not a full export: with no `startDate`, its
25848
- {{lastExportDateTime}} is the run's own timestamp (the value {{currentExportDateTime}} also
25849
- holds), so it picks up no earlier changes. Set `startDate` to reach back further. On success,
25850
- when `POST /v1/flows/{_id}/run` sends `export.endDate`, the flow's checkpoint is left at that
25851
- value, so an end date in the past moves the next run's lower bound back.
25900
+ Configures incremental exports that retrieve only records created or modified since the
25901
+ flow's delta checkpoint; omit it for other export types. Adaptors that compare a record field
25902
+ name it in `dateField`, while HTTP exports and SQL queries carry {{lastExportDateTime}} in the
25903
+ request and save without a delta object. Each run's window runs from {{lastExportDateTime}}
25904
+ (the checkpoint) to {{currentExportDateTime}} (the time the run started). A first run is not a
25905
+ full export: with no `startDate`, its {{lastExportDateTime}} is the run's own timestamp, so it
25906
+ picks up no earlier changes. The checkpoint moves to a run's window end only when the run
25907
+ exports records, so a run that exports nothing leaves it where it was, and after a failed run
25908
+ the next run reuses the last checkpoint. On success, when `POST /v1/flows/{_id}/run` sends
25909
+ `export.endDate`, the flow's checkpoint is left at that value, so an end date in the past
25910
+ moves the next run's lower bound back.
25852
25911
  x-celigo-ai-guidance:
25853
25912
  - |-
25854
- This object is REQUIRED when the export's type field is set to "delta" and
25855
- should not be included for other export types.
25913
+ Omit this object for export types other than "delta". An HTTP export with type
25914
+ "delta" saves without it, since the request carries {{lastExportDateTime}}, but
25915
+ set ``startDate`` anyway: without it the first run's window is empty.
25856
25916
  Delta exports are designed for efficient synchronization by retrieving only
25857
25917
  records that have been created or modified since the last execution.
25858
25918
  - |-
25859
25919
  ## REQUIRED FIELDS
25860
25920
  - ``startDate`` -- the initial cutoff timestamp the platform uses on the
25861
25921
  first run (and as the floor for ``{{lastExportDateTime}}`` thereafter).
25862
- Adapter-specific validators (e.g. NetSuite's ``transformTwoDotZero``)
25863
- reject delta configs that omit ``startDate`` with
25864
- ``missing_delta_startDate``, so this is effectively required for every
25865
- delta export.
25922
+ Without it, a new flow's first run renders ``{{lastExportDateTime}}`` as
25923
+ the run's own time, so the first run exports nothing (verified on HTTP
25924
+ and RDBMS delta exports). Adapter-specific validators (e.g. NetSuite's
25925
+ ``transformTwoDotZero``) reject delta configs that omit ``startDate``
25926
+ with ``missing_delta_startDate``, so set it on every delta export.
25866
25927
  - |-
25867
25928
  ## DEFAULT CUTOFF BEHAVIOR (NO USER-SUPPLIED CUTOFF)
25868
25929
  When the user prompt does not specify an explicit cutoff timestamp,
25869
25930
  default ``startDate`` to **today at midnight UTC** in ISO-8601 format
25870
25931
  (e.g. ``"2026-05-14T00:00:00.000Z"``). This means the first run picks
25871
25932
  up records changed today; subsequent runs use the platform-managed
25872
- ``{{lastExportDateTime}}`` (the last successful run timestamp).
25933
+ ``{{lastExportDateTime}}`` (the end of the last run that exported records).
25873
25934
 
25874
25935
  - First run: filters records changed since ``startDate``.
25875
25936
  - Subsequent runs: uses ``{{lastExportDateTime}}`` as the lower bound;
@@ -25882,18 +25943,28 @@ components:
25882
25943
  - For HTTP exports: Use {{lastExportDateTime}} variable in relativeURI or body
25883
25944
  - For specific application adapters: Use dateField to specify timestamp fields
25884
25945
 
25885
- 2. The system automatically maintains the last successful run timestamp
25946
+ 2. The system automatically maintains the checkpoint
25886
25947
  - No need to store or manage timestamps in your own code
25887
25948
  - A first run without ``startDate`` fetches nothing older than the run itself
25888
- - Subsequent runs use this timestamp as the starting point
25949
+ - A run that exports records moves the checkpoint to its window end
25950
+ ({{currentExportDateTime}}), where the next run starts
25951
+ - Use {{lastExportDateTime}} as the lower bound; {{currentExportDateTime}} as the
25952
+ lower bound asks for records changed after the run started, so every run exports nothing
25889
25953
 
25890
25954
  3. Error handling and recovery:
25891
25955
  - If an export fails, the next run uses the last successful timestamp
25892
25956
  - Records created/modified during a failed run will be included in the next run
25957
+ - A run that exports nothing leaves the checkpoint where it was, so after a stretch of
25958
+ empty runs the next run that finds records reaches back to the last run that exported
25959
+ any: once the cause is fixed, no backfill run is needed
25960
+ - A run given its own window (export.startDate / export.endDate on
25961
+ POST /v1/flows/{_id}/run) that exports records leaves the checkpoint at endDate,
25962
+ even a past one, so the next run re-reads everything after it
25893
25963
  - The lagOffset field can be used to handle edge cases
25894
25964
  - |-
25895
- This object is REQUIRED when the export's type field is set to "delta" and
25896
- should not be included for other export types.
25965
+ Omit this object for export types other than "delta". An HTTP export with type
25966
+ "delta" saves without it, since the request carries {{lastExportDateTime}}, but
25967
+ set ``startDate`` anyway: without it the first run's window is empty.
25897
25968
  Delta exports are designed for efficient synchronization by retrieving only
25898
25969
  records that have been created or modified since the last execution.
25899
25970
  properties:
@@ -25909,8 +25980,9 @@ components:
25909
25980
  If the flow's own downstream steps update the exported records, add export criteria
25910
25981
  that exclude already-processed records (or use a creation-time field for process-once
25911
25982
  flows) so each run doesn't re-export what the previous run wrote. Not supported on
25912
- HTTP exports: embed {{lastExportDateTime}} in the relativeURI or body instead;
25913
- including dateField there makes the configuration invalid. For Salesforce this
25983
+ HTTP exports: embed {{lastExportDateTime}} in the relativeURI or body instead; an HTTP
25984
+ export saved with dateField is refused with 422 "Unsupported dateField in
25985
+ export.delta.dateField". For Salesforce this
25914
25986
  field is required and defaults to the standard timestamp fields (LastModifiedDate,
25915
25987
  CreatedDate, SystemModstamp, LastActivityDate, LastViewedDate, LastReferencedDate) plus
25916
25988
  any custom timestamp fields.
@@ -25949,7 +26021,8 @@ components:
25949
26021
  ###CRITICAL ADAPTOR-SPECIFIC INSTRUCTION:
25950
26022
  - The adaptor type is HTTP. For HTTP exports, the "dateField" property MUST NOT be included in the delta configuration.
25951
26023
  - HTTP exports use the {{lastExportDateTime}} variable directly in the relativeURI or body instead of dateField.
25952
- - DO NOT include "dateField" in your response. If you include it, the configuration will be invalid.
26024
+ - DO NOT include "dateField" in your response. If you include it, the save is refused with
26025
+ 422 "Unsupported dateField in export.delta.dateField".
25953
26026
 
25954
26027
  Example HTTP query with implicit delta:
25955
26028
  ```
@@ -26009,10 +26082,10 @@ components:
26009
26082
  dateFormat:
26010
26083
  type: string
26011
26084
  description: |-
26012
- Moment.js format string applied to the cutoff timestamp, including {{lastExportDateTime}}
26013
- when used in HTTP requests. Leave unset unless the source system requires a non-ISO8601
26014
- format; ISO 8601 is used by default. Date-only formats truncate the time portion,
26015
- widening the filter window.
26085
+ Moment.js format string applied to both delta variables, {{lastExportDateTime}} and
26086
+ {{currentExportDateTime}}, in HTTP requests and SQL queries alike. Leave unset unless the
26087
+ source system requires a non-ISO8601 format; by default both render as ISO 8601 UTC with
26088
+ milliseconds. Date-only formats truncate the time portion, widening the filter window.
26016
26089
  x-celigo-ai-guidance:
26017
26090
  - Defines the date/time format expected by the source system's API.
26018
26091
  - |-
@@ -26023,7 +26096,8 @@ components:
26023
26096
  - OPTIONAL: Only needed when the source system doesn't support ISO8601
26024
26097
  - Default: ISO8601 format (YYYY-MM-DDTHH:mm:ss.sssZ)
26025
26098
  - Uses Moment.js formatting tokens
26026
- - Directly affects the format of {{lastExportDateTime}} when used in HTTP requests
26099
+ - Formats both {{lastExportDateTime}} and {{currentExportDateTime}}, in HTTP requests and in
26100
+ SQL queries (an RDBMS delta query receives the formatted value as a quoted literal)
26027
26101
  - |-
26028
26102
  ## IMPLEMENTATION PATTERNS
26029
26103
 
@@ -26107,13 +26181,15 @@ components:
26107
26181
  format: date-time
26108
26182
  description: |-
26109
26183
  Lower-bound cutoff for the first run. Omitting it doesn't export history: the first run
26110
- then starts at its own timestamp. Set it to the earliest change the first run should pick
26111
- up. Subsequent runs use the platform-managed last-successful-run timestamp.
26184
+ then starts at its own timestamp, an empty window. Set it to the earliest change the first
26185
+ run should pick up. Later runs start from the flow's checkpoint, the end of the last run
26186
+ that exported records.
26112
26187
  x-celigo-ai-guidance:
26113
26188
  - |-
26114
26189
  Initial cutoff timestamp for the first export run, in ISO-8601 UTC format (e.g.
26115
26190
  ``"2026-05-14T00:00:00.000Z"``).
26116
- REQUIRED for every delta export -- adapter-specific validators reject delta
26191
+ Set it on every delta export: without it the first run's window is empty (verified
26192
+ on HTTP and RDBMS delta exports), and adapter-specific validators reject delta
26117
26193
  configs without it (e.g.
26118
26194
  NetSuite returns ``missing_delta_startDate`` from the ``transformTwoDotZero`` processor).
26119
26195
  - |-
@@ -26125,10 +26201,11 @@ components:
26125
26201
  flow is being authored.
26126
26202
  - |-
26127
26203
  ## SUBSEQUENT RUNS
26128
- After the first successful run, the platform tracks the actual
26129
- last-run timestamp and exposes it as ``{{lastExportDateTime}}``;
26130
- ``startDate`` becomes the floor used only when the platform
26131
- timestamp is absent (e.g. after a reset).
26204
+ After the first run that exports records, the platform keeps the
26205
+ flow's checkpoint at the end of the last run that exported records
26206
+ and exposes it as ``{{lastExportDateTime}}``; runs that export
26207
+ nothing leave it unchanged. ``startDate`` becomes the floor used
26208
+ only when the platform timestamp is absent (e.g. after a reset).
26132
26209
  - |-
26133
26210
  ## EXAMPLES
26134
26211
  - ``"2026-05-14T00:00:00.000Z"`` -- today at midnight UTC.
@@ -26137,7 +26214,8 @@ components:
26137
26214
  - |-
26138
26215
  Initial cutoff timestamp for the first export run, in ISO-8601 UTC format (e.g.
26139
26216
  ``"2026-05-14T00:00:00.000Z"``).
26140
- REQUIRED for every delta export -- adapter-specific validators reject delta
26217
+ Set it on every delta export: without it the first run's window is empty (verified
26218
+ on HTTP and RDBMS delta exports), and adapter-specific validators reject delta
26141
26219
  configs without it (e.g.
26142
26220
  NetSuite returns ``missing_delta_startDate`` from the ``transformTwoDotZero`` processor).
26143
26221
  examples:
@@ -26278,7 +26356,7 @@ components:
26278
26356
  - exported_to_netsuite
26279
26357
  Webhook:
26280
26358
  type: object
26281
- description: Configuration for webhook listeners that receive data through incoming HTTP requests. Required when the export's `type` is `webhook`; omit for other export types. The platform generates a unique endpoint URL, validates each incoming request using the configured `verify` method, passes the payload to subsequent flow steps, and returns a configurable HTTP response to the caller.
26359
+ description: Configuration for webhook listeners that receive data through incoming HTTP requests. Required when the export's `type` is `webhook`; omit for other export types. Senders POST to the export's listener URL, `https://api.integrator.io/v1/exports/{_id}/data` (or the same path on the account's regional API host); the platform validates each request using the configured `verify` method, passes the payload to subsequent flow steps, and returns a configurable HTTP response to the caller. A request is answered 204 by default when accepted, 401 when it fails verification, and 403 `unable_to_run_flows` while every flow the export feeds is disabled; a refused request is not queued, so the sender must resend it.
26282
26360
  x-celigo-ai-guidance:
26283
26361
  - Configuration object for real-time event listeners that receive data via incoming HTTP requests.
26284
26362
  - |-
@@ -26652,7 +26730,7 @@ components:
26652
26730
  - sha1
26653
26731
  encoding:
26654
26732
  type: string
26655
- description: Encoding of the HMAC signature value when `verify` is `hmac`. Must match the encoding the webhook sender uses — a mismatch causes requests to be rejected even when the signature is otherwise correct.
26733
+ description: 'Encoding of the HMAC signature value when `verify` is `hmac`. Must match the encoding the webhook sender uses — a mismatch causes requests to be rejected with a 401 even when the signature is otherwise correct. With `provider: custom`, `hex` is compared as lowercase hex: an uppercase hex signature is rejected.'
26656
26734
  x-celigo-ai-guidance:
26657
26735
  - Specifies the encoding format used for the HMAC signature in webhook requests.
26658
26736
  - |-
@@ -26748,7 +26826,7 @@ components:
26748
26826
  - 9d1a5c6b3e7d9f2a1c5b8e3aEXAMPLE
26749
26827
  header:
26750
26828
  type: string
26751
- description: Name of the request header that carries the HMAC signature when `verify` is `hmac`. Must match the header name the webhook sender uses (header names are case-insensitive); requests without this header are rejected with a 401. Signature prefixes in the header value (such as `sha256=`) are handled automatically.
26829
+ description: 'Name of the request header that carries the HMAC signature when `verify` is `hmac`. Must match the header name the webhook sender uses (header names are case-insensitive); requests without this header are rejected with a 401. With `provider: custom` the header value must be the bare digest in the configured `encoding`: a value with a `sha256=` prefix is rejected with a 401.'
26752
26830
  x-celigo-ai-guidance:
26753
26831
  - Specifies the HTTP header name that contains the signature for HMAC verification.
26754
26832
  - |-
@@ -26794,8 +26872,9 @@ components:
26794
26872
 
26795
26873
  - The system will look for this exact header name in incoming requests
26796
26874
  - If the header is not found, the request will be rejected with a 401 error
26797
- - Some platforms may include a prefix in the header value (e.g., "sha256=")
26798
- which is handled automatically by the system
26875
+ - Some platforms include a prefix in the header value (e.g., "sha256="). With
26876
+ provider "custom" it is not stripped: a prefixed signature is rejected with a 401,
26877
+ so the sender must send the bare digest
26799
26878
 
26800
26879
  IMPORTANT: This must exactly match the header name used by the webhook sender.
26801
26880
  If you're unsure about the correct header name, consult the sender's documentation
@@ -27870,11 +27949,12 @@ components:
27870
27949
  - metadata
27871
27950
  skipDelete:
27872
27951
  type: boolean
27952
+ default: false
27873
27953
  description: |-
27874
27954
  When true, source files remain on the file server after processing; when false (the
27875
27955
  default), files are deleted after successful processing. Files that fail processing are
27876
27956
  never deleted, regardless of this setting. Enable retention when files must be processed
27877
- by other flows or kept for compliance.
27957
+ by other flows or systems, or kept for compliance.
27878
27958
  x-celigo-ai-guidance:
27879
27959
  - |-
27880
27960
  Controls whether source files are retained or deleted after successful processing.
@@ -28547,8 +28627,10 @@ components:
28547
28627
  type: string
28548
28628
  description: |-
28549
28629
  Character sequence separating fields within each row; comma when omitted. Use "\t"
28550
- for tab-delimited files; European-locale exports often use semicolons. An incorrect
28551
- delimiter is the most common cause of parsing failures.
28630
+ for tab-delimited files; European-locale exports often use semicolons. A wrong
28631
+ delimiter doesn't fail the parse: with a header row, each row becomes one field named
28632
+ after the whole header line (`{"order_id;sku;qty": "1001;TEE-M;2"}`), so the failure
28633
+ shows up in later steps.
28552
28634
  x-celigo-ai-guidance:
28553
28635
  - |-
28554
28636
  Specifies the character sequence that separates individual fields (columns)
@@ -33978,19 +34060,25 @@ components:
33978
34060
  description: |-
33979
34061
  Directory on the same server where files are moved after successful export, giving you
33980
34062
  an independent backup; if omitted, files are simply deleted from the source directory
33981
- after successful export (Celigo also keeps its own copy of processed files for a set
33982
- period). Supports static paths or handlebars templates.
34063
+ after successful export unless `file.skipDelete` is true (Celigo also keeps its own copy
34064
+ of processed files for a set period). Supports static paths or handlebars templates.
33983
34065
  x-celigo-ai-guidance:
33984
34066
  - Optional directory where files are moved before deletion.
33985
34067
  - |-
33986
34068
  IMPORTANT:
33987
- Celigo automatically deletes files from the source directory after successful export.
34069
+ Celigo automatically deletes files from the source directory after successful export,
34070
+ unless `file.skipDelete` is true. Moving them to a backup directory also takes them out
34071
+ of the source directory, so when another system still reads them there, set
34072
+ `file.skipDelete: true` instead.
33988
34073
  The backup directory is for users who want to maintain their own independent
33989
34074
  backup of exported files.
33990
34075
  Celigo also maintains its own backup of processed files for a set period of time.
33991
34076
  - |-
33992
34077
  IMPORTANT:
33993
- Celigo automatically deletes files from the source directory after successful export.
34078
+ Celigo automatically deletes files from the source directory after successful export,
34079
+ unless `file.skipDelete` is true. Moving them to a backup directory also takes them out
34080
+ of the source directory, so when another system still reads them there, set
34081
+ `file.skipDelete: true` instead.
33994
34082
  The backup directory is for users who want to maintain their own independent
33995
34083
  backup of exported files.
33996
34084
  Celigo also maintains its own backup of processed files for a set period of time.
@@ -36462,19 +36550,26 @@ components:
36462
36550
  description: |-
36463
36551
  Bucket in the same region where files are moved after successful export, giving you an
36464
36552
  independent backup; if omitted, files are simply deleted from the source bucket after
36465
- successful export (Celigo also keeps its own copy of processed files for a set period).
36466
- The connection's AWS credentials must have s3:PutObject permission on this bucket.
36553
+ successful export unless `file.skipDelete` is true (Celigo also keeps its own copy of
36554
+ processed files for a set period). The connection's AWS credentials must have
36555
+ s3:PutObject permission on this bucket.
36467
36556
  x-celigo-ai-guidance:
36468
36557
  - Optional destination bucket where files are moved before deletion.
36469
36558
  - |-
36470
36559
  IMPORTANT:
36471
- Celigo automatically deletes files from the source bucket after successful export.
36560
+ Celigo automatically deletes files from the source bucket after successful export,
36561
+ unless `file.skipDelete` is true. Moving them to a backup bucket also takes them out of
36562
+ the source bucket, so when another system still reads them there, set
36563
+ `file.skipDelete: true` instead.
36472
36564
  The backup bucket is for users who want to maintain their own independent backup
36473
36565
  of exported files.
36474
36566
  Celigo also maintains its own backup of processed files for a set period of time.
36475
36567
  - |-
36476
36568
  IMPORTANT:
36477
- Celigo automatically deletes files from the source bucket after successful export.
36569
+ Celigo automatically deletes files from the source bucket after successful export,
36570
+ unless `file.skipDelete` is true. Moving them to a backup bucket also takes them out of
36571
+ the source bucket, so when another system still reads them there, set
36572
+ `file.skipDelete: true` instead.
36478
36573
  The backup bucket is for users who want to maintain their own independent backup
36479
36574
  of exported files.
36480
36575
  Celigo also maintains its own backup of processed files for a set period of time.
@@ -36930,7 +37025,9 @@ components:
36930
37025
  `NetSuiteExport` and `NetSuiteHTTPExport` both need a `netsuite` connection).
36931
37026
  Server-required unless `type` is `webhook` or `simple` (those receive data instead of
36932
37027
  fetching it) or `adaptorType` is `TopicExport` (Event Streams listeners are delivered
36933
- by the platform itself and must omit it).
37028
+ by the platform itself and must omit it). A `WebhookExport` saved without `type: webhook`
37029
+ is refused with 422 "_connectionId is required unless type is [webhook|simple]"; a webhook
37030
+ export that does carry a connection saves and updates normally.
36934
37031
  examples:
36935
37032
  - 60a2c4e6f321d800129a1a3c
36936
37033
  adaptorType:
@@ -37051,9 +37148,11 @@ components:
37051
37148
  description: |-
37052
37149
  Operational mode of the export. When omitted, the export retrieves all available records —
37053
37150
  the standard batch mode, which is also the right choice for parsing structured files
37054
- (CSV/XML/JSON) into records. Each mode requires its matching configuration object
37055
- (e.g. a `delta` object when `type` is `delta`); use `blob` only to transfer raw files
37056
- without parsing their contents.
37151
+ (CSV/XML/JSON) into records. Most modes take their matching configuration object (e.g. a
37152
+ `webhook` object when `type` is `webhook`); an HTTP or SQL `delta` export saves without a
37153
+ `delta` object because its request carries `{{lastExportDateTime}}`, though
37154
+ `delta.startDate` sets its first window. Use `blob` only to transfer raw files without
37155
+ parsing their contents.
37057
37156
  x-celigo-ai-guidance:
37058
37157
  - |-
37059
37158
  ## HOW TO PICK THE TYPE VALUE