@celigo/api-specs 0.2.209 → 0.2.211

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
@@ -7503,26 +7503,36 @@ components:
7503
7503
  PGP:
7504
7504
  type: object
7505
7505
  description: |-
7506
- PGP encryption settings for file-based connections (ftp, s3, and similar). When set, files are
7507
- PGP-encrypted before upload and/or decrypted after download. Supply at least one of `publicKey`
7508
- (to encrypt outbound files) or `privateKey` (to decrypt inbound files); set `passphrase` whenever
7509
- `privateKey` is provided.
7506
+ PGP keys and options for the file transports — `ftp`, `s3`, the on-premise file system and the
7507
+ cloud file-provider connections such as Box, Dropbox, Google Drive, Azure Blob Storage and
7508
+ Celigo file storage. `publicKey` encrypts the files the connection's imports write,
7509
+ record-generated files and transferred (blob) files alike; `privateKey` with its `passphrase`
7510
+ decrypts the files its exports read and signs encrypted output. Supply at least one of the two.
7510
7511
  properties:
7511
7512
  publicKey:
7512
7513
  type: string
7513
7514
  description: |-
7514
- ASCII-armored PGP public key used to encrypt outbound files before upload.
7515
- Set this when the connection sends encrypted files; omit it for decrypt-only connections.
7515
+ ASCII-armored PGP public key of the recipient, used to encrypt every file an import on this
7516
+ connection writes with `file.encrypt: pgp`; omit it for decrypt-only connections. Returned
7517
+ in clear on reads.
7516
7518
  x-celigo-ai-guidance:
7517
7519
  - |-
7518
- Public key for JWT verification. Optional — used when the API requires
7519
- the public key to be registered for signature verification.
7520
+ An import on this connection cannot save `file.encrypt: pgp` without it — the save fails
7521
+ with 422 `missing_required_field` on `file.encrypt` ("pgp publicKey is required when
7522
+ encrypt is selected to perform file encryption."); the import form disables its Encrypt
7523
+ files control until the connection holds a key.
7520
7524
  privateKey:
7521
7525
  type: string
7522
7526
  writeOnly: true
7523
7527
  description: |-
7524
7528
  ASCII-armored PGP private key used to decrypt inbound files after download (encrypted at rest;
7525
- returned masked as `"******"`). Set this when the connection receives encrypted files.
7529
+ returned masked as `"******"`). Set this when the connection receives encrypted files, or
7530
+ when its imports sign what they encrypt (`file.pgp.hashAlgorithm`).
7531
+ x-celigo-ai-guidance:
7532
+ - |-
7533
+ Signing needs it: an import that sets `file.pgp.hashAlgorithm` on a connection without a
7534
+ private key fails to save with 422 `missing_required_field` on `file.pgp.hashAlgorithm`
7535
+ ("pgp privateKey is required when hashAlgorithm is selected to perform file signature.").
7526
7536
  passphrase:
7527
7537
  type: string
7528
7538
  writeOnly: true
@@ -9247,10 +9257,11 @@ components:
9247
9257
  retryHeader:
9248
9258
  type: string
9249
9259
  description: |
9250
- HTTP response header name that contains the retry delay (in seconds) when rate-limited.
9251
-
9252
- Defaults to "Retry-After" which is the HTTP standard. Only change this if the API
9253
- uses a non-standard header name for retry-after values.
9260
+ Response header the retry reads for its wait once a response has been recognized
9261
+ as rate-limited — a delay in seconds or an HTTP date. It only sets the wait: a
9262
+ response carrying the header is not treated as throttled unless a status, header
9263
+ or body rule under `rateLimit` matches it. Change it only when the API names its
9264
+ retry-after header differently.
9254
9265
  default: Retry-After
9255
9266
  formType:
9256
9267
  type: string
@@ -9980,42 +9991,60 @@ components:
9980
9991
  rateLimit:
9981
9992
  type: object
9982
9993
  description: |
9983
- Rate limiting configuration. Defines how the system detects and handles
9984
- API rate limit responses.
9985
-
9986
- When rate limiting is detected, the system pauses requests and waits for
9987
- the retry-after period before resuming. The retryHeader field on the parent
9988
- HTTP object controls which response header contains the wait time.
9994
+ Rules for recognizing a throttled response. When any rule is set, every response
9995
+ through the connection is checked against the status code, the header rules and
9996
+ the body rule, and the first match marks the request rate-limited; the retry then
9997
+ waits for the header named by the parent `retryHeader` (`Retry-After` by default).
9998
+ A 429 is recognized with no rules at all; a 2xx response is recognized only through
9999
+ a matching `failHeaders` rule or a matching `failPath` + `failValues` pair, which is
10000
+ how APIs that throttle inside a 200 body (GraphQL, Shopify among them) are handled.
9989
10001
  properties:
9990
10002
  failStatusCode:
9991
10003
  type: number
9992
10004
  description: |
9993
- HTTP status code that indicates the API is rate-limiting requests.
9994
- Defaults to 429 (Too Many Requests) which is the HTTP standard.
9995
- Change only if the API uses a non-standard status code for rate limits.
10005
+ Status code that marks a response rate-limited in place of the standard 429.
10006
+ Set it only when the API throttles with another non-success code; a 2xx value
10007
+ does not make successful responses count as throttled on its own.
9996
10008
  default: 429
9997
10009
  failPath:
9998
10010
  type: string
9999
10011
  description: |
10000
- JSON path or XPath to check in response bodies for rate limit indicators.
10001
- Used when APIs return 200 OK but embed rate limit errors in the response body.
10012
+ JSON path or XPath to the body field that carries the API's throttle indicator,
10013
+ for APIs that answer 200 with the error inside the body. Point at the field
10014
+ itself (`errors.0.extensions.code`), not at the array or object around it, and
10015
+ pair it with `failValues`, which supplies the values that mean "throttled".
10002
10016
  examples:
10003
- - errors[0].code
10017
+ - errors.0.extensions.code
10018
+ x-celigo-ai-guidance:
10019
+ - |-
10020
+ Saves on its own (the probe shows a `failPath` with no `failValues` is accepted),
10021
+ and the documented contract recognizes a 200 as throttled only when `failValues`
10022
+ is set as well. For Shopify GraphQL the platform's own example is
10023
+ `errors.0.extensions.code` with `failValues: ["THROTTLED"]`.
10004
10024
  failValues:
10005
10025
  type: array
10006
10026
  items:
10007
10027
  type: string
10008
10028
  description: |
10009
- Values at failPath that indicate rate limiting. Requires failPath to be set.
10029
+ Values at `failPath` that mean the request was throttled; a match on any of them
10030
+ marks the response rate-limited.
10010
10031
  examples:
10011
- - - rate_limit_exceeded
10012
- - too_many_requests
10032
+ - - THROTTLED
10033
+ - MAX_COST_EXCEEDED
10034
+ x-celigo-ai-guidance:
10035
+ - |-
10036
+ Needs `failPath`: `failValues` without it fails the save with 422
10037
+ `dependent_field` ("The field: failValues should not be specified without the
10038
+ field: failPath for the Connection.").
10013
10039
  failHeaders:
10014
10040
  type: array
10015
10041
  description: |
10016
- Response-header rules for detecting rate limiting, each a header `name` with an
10017
- optional `value`. A rule with an empty `name` fails the save with 422
10018
- `invalid_header_format`.
10042
+ Response-header rules for recognizing a throttled response, each a header `name`
10043
+ with an optional `value`. A rule with a `value` matches when the response header
10044
+ carries that value — the stored text is compared with the header as received; a
10045
+ rule with no `value` matches whenever the header is present at all, so a header
10046
+ the API sends on every response (a remaining-quota counter) would mark every
10047
+ response throttled — give such a header a value.
10019
10048
  items:
10020
10049
  type: object
10021
10050
  required:
@@ -10026,18 +10055,32 @@ components:
10026
10055
  description: Response header the rule checks.
10027
10056
  value:
10028
10057
  type: string
10029
- description: Header value the rule checks; omit to check the header alone.
10058
+ description: Header value the rule compares with the response header; omit to match on the header's presence alone. Stored as sent.
10030
10059
  examples:
10031
10060
  - - name: X-RateLimit-Remaining
10032
10061
  value: '0'
10062
+ x-celigo-ai-guidance:
10063
+ - |-
10064
+ A rule without a `name` fails the save with 422 `invalid_header_format`; a rule
10065
+ with a name and no value saves and matches on presence. The value is stored as
10066
+ sent and not validated at save time.
10033
10067
  limit:
10034
10068
  type: number
10035
10069
  minimum: 1
10070
+ x-celigo-ui-override: Semantics mirror the connection form, which labels the field "Wait time between HTTP requests" and requires the value in milliseconds (fieldDefinitions/resources/connection.js 'http.rateLimit.limit').
10036
10071
  description: |
10037
- Maximum number of requests per rate-limit window. When set, the connection's
10038
- effective concurrency level must be 1 to ensure proper rate limit enforcement.
10072
+ Minimum spacing between consecutive requests through the connection, in
10073
+ milliseconds, for APIs that cap request rate rather than concurrency. It only
10074
+ applies when the connection runs one request at a time.
10039
10075
  examples:
10040
10076
  - 1000
10077
+ x-celigo-ai-guidance:
10078
+ - |-
10079
+ Saves only when `concurrencyLevel` is 1 — and, with `autoRecoverRateLimitErrors`
10080
+ on, `targetConcurrencyLevel` is 1 as well; otherwise the save fails with 422
10081
+ `invalid_concurrency_level` ("The field "connection.http.concurrencyLevel"
10082
+ should be set to 1 when the field "connection.http.rateLimit.limit" is
10083
+ populated."). A numeric string is stored as a number.
10041
10084
  headers:
10042
10085
  type: array
10043
10086
  description: |
@@ -16452,13 +16495,13 @@ components:
16452
16495
  jsonPath:
16453
16496
  type: string
16454
16497
  description: |
16455
- JSONPath into the source record that selects the
16456
- data feeding this subrecord. Semantics depend
16498
+ JSONPath from the source record root that selects
16499
+ the data feeding this subrecord. Semantics depend
16457
16500
  on placement:
16458
16501
  * Line-level (on `lists[].fields[].`
16459
- `subRecordMapping`) — often `$` to reuse
16460
- the enclosing sublist line's row, or a path
16461
- into a nested array on that row.
16502
+ `subRecordMapping`) — the array of lines the
16503
+ sublist iterates (`lineItems`); `$` only when
16504
+ each record is itself one line.
16462
16505
  * Body-level (on `fields[].subRecordMapping`)
16463
16506
  — a path into the source record root.
16464
16507
  Defaults to `$`.
@@ -16650,9 +16693,10 @@ components:
16650
16693
  type: boolean
16651
16694
  description: |-
16652
16695
  When true, this field is a key for matching the record's existing sublist lines: a
16653
- mapped line updates the one existing line whose key fields hold the same values. `lists`
16654
- says which records match lines, the keys used when no field sets `isKey`, and what a
16655
- line that matches no line, or several, does.
16696
+ mapped line updates the one existing line whose key fields hold the same values —
16697
+ every key field must match, so several keys narrow the match. `lists` says which
16698
+ records match lines, the keys used when no field sets `isKey`, and what a line that
16699
+ matches no line, or several, does.
16656
16700
  immutable:
16657
16701
  type: boolean
16658
16702
  description: When true, this field is only set on record creation, not on updates.
@@ -16731,13 +16775,19 @@ components:
16731
16775
  jsonPath:
16732
16776
  type: string
16733
16777
  description: |
16734
- JSONPath (relative to the current sublist
16735
- line) to the rows that populate the
16736
- subrecord. Typically `$` when the
16737
- subrecord data is carried on the same
16738
- line item (iteration over the sublist
16739
- has already selected the line).
16740
- Defaults to `$`.
16778
+ Path from the source record root to the
16779
+ array of lines whose elements feed this
16780
+ subrecord — the same array the sublist
16781
+ iterates (`lineItems`, `items`); the n-th
16782
+ element populates the n-th sublist line.
16783
+ `$` only when each source record is itself
16784
+ one line. Defaults to `$`.
16785
+ x-celigo-ai-guidance:
16786
+ - |-
16787
+ `$` on a record whose lines sit under a field renders no subrecord for any
16788
+ line, and NetSuite rejects the first numbered line with `Please configure the
16789
+ inventory detail in line N of the item list`; name the line array
16790
+ (`lineItems`), never the current-line context.
16741
16791
  mapping:
16742
16792
  type: object
16743
16793
  description: |
@@ -16848,6 +16898,11 @@ components:
16848
16898
  with `MULTIPLE_LINES_WITH_SAME_KEYS` ("Multiple lines found with keys item=<value> ..."). A
16849
16899
  line that matches none is added as a new line, which an item fulfillment's `item` sublist
16850
16900
  refuses with `SSS_INVALID_SUBLIST_OPERATION`: its lines are its order's.
16901
+
16902
+ On a fulfillment created from an order, a kit's lot-, serial- or bin-managed components are
16903
+ lines of their own under the kit's line, each with its own `line` and `orderline` (the
16904
+ component's own order line) and `kitmemberof` holding the kit line's id; the inventory detail
16905
+ belongs on those component lines, and a kit line refuses it.
16851
16906
  x-celigo-ai-guidance:
16852
16907
  - |-
16853
16908
  To make an update replace a sublist's lines, also map the body field
@@ -16862,6 +16917,24 @@ components:
16862
16917
  field, or, on a fulfillment, the order line's id mapped to `orderline`. Keying on the item fails
16863
16918
  with `MULTIPLE_LINES_WITH_SAME_KEYS` when an order holds the same item on two lines, and records
16864
16919
  that already hold repeated lines fail the same way once a key is set.
16920
+ - |-
16921
+ A key field is read from the existing lines, never written, so a read-only field keys as well
16922
+ as a writable one. The mapper's "Items : Line ID" is `line` (the fulfillment's own line number,
16923
+ equal to the order line only on a fresh full transform) and "Items : Line Number" is `linenum`;
16924
+ `orderline` and `kitmemberof` are not in its picker — type `item[*].orderline` /
16925
+ `item[*].kitmemberof` as the destination.
16926
+ - |-
16927
+ Kit components on a fulfillment: the item is the only default key that reaches a component
16928
+ line, so a component two kit lines share fails with `MULTIPLE_LINES_WITH_SAME_KEYS`. Keying the
16929
+ component rows on the KIT's order line (`line` or `orderline`) selects the kit line instead and
16930
+ the save fails with `You cannot create an inventory detail for this item`. When the source
16931
+ carries the kit's order line on its component rows, keep the item as a key and add
16932
+ `item[*].kitmemberof` mapped from that line id as a second key, keep the kit rows in the list
16933
+ (their empty `kitmemberof` matches the kit line) with `item[*].celigo_ignore_current_line_invdetail_subrecord`
16934
+ true so no inventory detail is written on them, and build the inventory detail from each
16935
+ component row's own picks; component rows alone leave every kit line unfulfilled (`You must
16936
+ enter at least one line item for this transaction`). When the source can supply each
16937
+ component line's own order line id, key every row on `orderline` instead.
16865
16938
  x-celigo-agent:
16866
16939
  - mapping
16867
16940
  lookups:
@@ -20886,14 +20959,33 @@ components:
20886
20959
  x-enumDescriptions:
20887
20960
  pgp: Encrypt the file with PGP before it is written.
20888
20961
  description: |-
20889
- Encrypts the output file; omit it for an unencrypted file. `pgp` requires
20890
- `pgp.symmetricKeyAlgorithm` and a connection holding the recipient's public key
20891
- (`pgp.publicKey`) — without either the save fails with 422 `missing_required_field`.
20892
- The public-key check runs first: on a connection without one, any `encrypt` value,
20893
- `false` included, fails with 422 `missing_required_field` "pgp publicKey is required
20894
- when encrypt is selected to perform file encryption." before the value is checked.
20895
- Blob (file-transfer) imports follow the same rule and return `encrypt` and `pgp` even
20896
- without `file.type`.
20962
+ Encrypts the file before it reaches the destination — a file generated from records
20963
+ or, on a `blob: true` transfer, the existing file being moved; omit it for an
20964
+ unencrypted file. `pgp` requires `pgp.symmetricKeyAlgorithm` and a connection holding
20965
+ the recipient's public key (`pgp.publicKey`). Not observed in a run here; per the file
20966
+ adaptor's code (IO-213945, the `blob: true` transfer path): with no `compressionFormat`,
20967
+ a file over 200 MB fails the record before encryption with `pgp_file_size_exceeded`
20968
+ ("The file size exceeds the maximum limit of 200 MB supported for PGP encryption." —
20969
+ the adaptor's `errorStore.js` text); with `compressionFormat` set the adaptor skips that
20970
+ pre-check (the compressed size is not known up front) and the encryption service
20971
+ enforces its own 200 MB limit on the compressed file (`S3_FILE_SIZE_EXCEEDED`); a key
20972
+ the platform cannot use fails with the PGP service's own code (`PGP_PUBLICKEY_INVALID` /
20973
+ `PGP_PRIVATEKEY_INVALID` — "<operation> failed because the <key> is invalid."), and
20974
+ `encryption_error` ("error in encrypting the file") only when the service returns no
20975
+ code; the file is never written in clear and a transfer's encryption failure is not
20976
+ retried automatically. A file generated from records meets the same encryption-service
20977
+ limit with `S3_FILE_SIZE_EXCEEDED`.
20978
+ x-celigo-ui-override: 'The transfer forms for FTP, S3, the on-premise file system and the cloud file providers (Box, Dropbox, Google Drive, Azure Blob Storage, Google Cloud Storage, Azure Data Lake Storage Gen2, Celigo file storage) offer the Encrypt files control in both modes (imports/subForms/fileAdvanced.js: ''pgpencrypt'' visible for inputMode records and blob, disabled until the connection holds a PGP key). The connection-side PGP section (connections/subForms/fileAdvanced.js) is mounted by ftp.js, s3.js, filesystem.js, celigoapis.ts, tp.js and the Box / Dropbox / Google Drive / Azure storage account custom HTTP forms; the Google Cloud Storage (httpFramework.js) and ADLS Gen2 (http.js) connection forms do not mount it, so on those two the key is set through the API. The AS2, VAN and NetSuite file cabinet import forms do not carry the control.'
20979
+ x-celigo-ai-guidance:
20980
+ - |-
20981
+ Without `pgp.symmetricKeyAlgorithm` the save fails with 422 `missing_required_field` on
20982
+ `file.pgp.symmetricKeyAlgorithm`; on a connection without `pgp.publicKey` it fails with
20983
+ 422 `missing_required_field` on `file.encrypt` ("pgp publicKey is required when encrypt
20984
+ is selected to perform file encryption."), and that check runs first, for any value.
20985
+ - |-
20986
+ `true` and `false` are rejected with 422 `enum` — the field is the string `pgp`, never a
20987
+ boolean. Blob transfers follow the same save rules and return `encrypt` and `pgp` on
20988
+ reads even without `file.type`.
20897
20989
  csv:
20898
20990
  type: object
20899
20991
  description: CSV-specific configuration. Only used when `type` is `"csv"`.
@@ -21165,10 +21257,16 @@ components:
21165
21257
  sha384: SHA-384 signing hash.
21166
21258
  sha512: SHA-512 signing hash.
21167
21259
  sha224: SHA-224 signing hash.
21168
- description: Hash algorithm used when signing the encrypted file; set only when the recipient requires a specific one.
21260
+ description: Hash algorithm used when signing the encrypted file; set only when the recipient requires a signature, which also needs the connection's `pgp.privateKey` and `pgp.passphrase`.
21169
21261
  examples:
21170
21262
  - sha256
21171
21263
  - sha512
21264
+ x-celigo-ai-guidance:
21265
+ - |-
21266
+ On a connection without `pgp.privateKey` the save fails with 422
21267
+ `missing_required_field` on `file.pgp.hashAlgorithm` ("pgp privateKey is required
21268
+ when hashAlgorithm is selected to perform file signature."); leave it unset unless
21269
+ the connection holds the private key.
21172
21270
  skipRename:
21173
21271
  type: boolean
21174
21272
  description: |-
@@ -27541,6 +27639,9 @@ components:
27541
27639
  - exported_to_netsuite
27542
27640
  Webhook:
27543
27641
  type: object
27642
+ required:
27643
+ - verify
27644
+ x-celigo-ui-override: 'verify is required by the webhook listener form for every provider (exports/webhook.js: verify required:true; on a connector-backed listener the form pre-fills it from the connector definition before saving). The API enforces it only when provider is custom or absent — 422 missing_required_field on webhook.verify, "verify is required for export type webhook, provider = custom". For the named providers probed (slack, shopify, github) it stores a listener posted with key and no verify (201 each; the GET carries provider, key and formType simple) and requires a credential instead: without key (and no token) each answers 422 missing_required_field on webhook.key — "key is required for slack verification" / "key is required for shopify verification" / "key is required for github verification"; a slack listener posted with token and no key saved. Other named providers are unprobed. The requirement is kept so an authored document matches a form-saved one.'
27544
27645
  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.
27545
27646
  x-celigo-ai-guidance:
27546
27647
  - Configuration object for real-time event listeners that receive data via incoming HTTP requests.
@@ -27615,7 +27716,7 @@ components:
27615
27716
  properties:
27616
27717
  provider:
27617
27718
  type: string
27618
- description: Source application sending the webhook, used to pre-configure security settings and payload parsing for that platform. Use `custom` (the default when omitted) for unlisted providers or when you need full manual control over the security configuration. Provider-specific choices may require credentials (tokens, keys) mandated by that platform.
27719
+ description: 'Source application sending the webhook. A named provider labels the listener and opens it in the Simple form view, where the form pre-fills that platform''s verification settings and payload parsing before saving; the API itself stores the document as sent and fills nothing in. Use `custom` (the default when omitted) for unlisted providers or when you need full manual control over the security configuration. A named provider requires a credential: `key` for the providers probed (shopify, github, slack — and slack also saves with `token` alone); the HMAC settings a provider''s form pre-fills are the form''s, not an API requirement (see the guidance below).'
27619
27720
  x-celigo-ai-guidance:
27620
27721
  - |-
27621
27722
  Specifies the source application sending webhook data,
@@ -27626,10 +27727,18 @@ components:
27626
27727
  This field determines how the webhook handles incoming requests:
27627
27728
 
27628
27729
  - OPTIONAL: Defaults to "custom" if not specified
27629
- - When a specific provider is selected, the system:
27630
- 1. Pre-configures appropriate security settings for that platform
27631
- 2. Applies platform-specific payload parsing rules
27632
- 3. May enable additional features only relevant to that provider
27730
+ - A named provider labels the listener, picks its form view (`formType`
27731
+ defaults to `simple`) and makes a credential required — probed for
27732
+ `slack`, `shopify` and `github`: without `key` (and no `token`) each
27733
+ fails with 422 missing_required_field on `webhook.key`, "key is required
27734
+ for slack verification" / "key is required for shopify verification" /
27735
+ "key is required for github verification"; a `slack` listener posted
27736
+ with `token` and no `key` saved. It does NOT make the API fill in
27737
+ `verify` and its companions — a document sent to the API stores exactly
27738
+ what it carries, and the listener form fills them from the connector
27739
+ definition before saving. Send them when the stored document should
27740
+ match a form-saved one (Slack: `verify: hmac`, `algorithm: sha256`,
27741
+ `encoding: base64`, `header: X-Slack-Signature`).
27633
27742
  - |-
27634
27743
  ## IMPLEMENTATION GUIDANCE
27635
27744
 
@@ -27639,9 +27748,10 @@ components:
27639
27748
  ```
27640
27749
  "provider": "shopify"
27641
27750
  ```
27642
- - Automatically configures proper HMAC verification settings
27643
- - Optimizes payload parsing for Shopify's webhook format
27644
- - May enable additional Shopify-specific features
27751
+ - Labels the listener as Shopify's and opens it in the Simple form view
27752
+ - Requires `key` (422 "key is required for shopify verification"); saves
27753
+ without `verify` and its companions, which the form would have filled in —
27754
+ send them for a document that matches a form-saved one
27645
27755
 
27646
27756
  ### Custom configuration
27647
27757
 
@@ -27657,7 +27767,7 @@ components:
27657
27767
 
27658
27768
  Choose a specific provider when:
27659
27769
  - The source system is explicitly listed in the enum values
27660
- - You want to leverage pre-configured settings
27770
+ - You want the form's pre-filled verification settings for that platform
27661
27771
  - The integration must follow platform-specific practices
27662
27772
 
27663
27773
  Choose "custom" when:
@@ -27704,7 +27814,7 @@ components:
27704
27814
  shopify: Shopify store event webhooks with HMAC-SHA256 verification.
27705
27815
  travis: Travis CI build event webhooks (travis-ci.com).
27706
27816
  travis-org: Travis CI build event webhooks (travis-ci.org).
27707
- slack: Slack workspace event webhooks with token verification.
27817
+ slack: Slack workspace event webhooks. The Simple form pre-fills HMAC-SHA256 over the `X-Slack-Signature` header with the app's signing secret as `key`; the API itself accepts either `key` or `token` as the credential (probed 2026-10-29) and pre-fills nothing.
27708
27818
  dropbox: Dropbox file change notification webhooks.
27709
27819
  onfleet: Onfleet delivery management event webhooks.
27710
27820
  helpscout: Help Scout customer support event webhooks.
@@ -27746,13 +27856,19 @@ components:
27746
27856
  Which webhook export form the UI uses to edit this listener. A value sent on create or
27747
27857
  update wins (case-insensitive — `Simple` is stored as `simple`); a PUT that omits it
27748
27858
  keeps the stored value, and a new export without one gets the default for its
27749
- `provider`. Every webhook export GET carries it.
27750
- examples:
27751
- - webhook
27859
+ `provider`. Every webhook export GET carries it. The view changes nothing at run time:
27860
+ the listener URL, the verification and the flows are the same in both.
27861
+ x-celigo-ai-guidance:
27862
+ - |-
27863
+ Omit it on create — the API stamps the provider's default (`simple` for a named
27864
+ provider, `webhook` for `custom`), with or without `_httpConnectorId`, and keeps a
27865
+ value the user set by hand. The legacy UI values `http` / `assistant` fail with 422
27866
+ `enum`, and the field is not PATCH-whitelisted (422 "not a whitelisted property"):
27867
+ change it through a full save.
27752
27868
  verify:
27753
27869
  type: string
27754
27870
  x-celigo-ui-override: Required by the webhook export form (verify is required:true). Encoded to mirror the form so builders produce connectable configurations.
27755
- description: 'Verification method applied to every incoming request before processing; required for all webhook exports. Each method needs companion fields: `hmac` requires `key`, `algorithm`, `encoding`, and `header` (except on connector-backed webhooks, where the connector definition supplies them); `token` requires `token`, with `tokenLocation` defaulting to `body` and selecting which location-specific field applies; `basic` requires `username` and `password`; `secret_url` requires `token`. Prefer `hmac` when the source system supports it — it is the most secure option; `secret_url` relies only on URL obscurity and suits non-sensitive data or testing.'
27871
+ description: 'Verification method applied to every incoming request before processing; required for all webhook exports. Each method needs companion fields: `hmac` requires `key`, `algorithm`, `encoding`, and `header` (on connector-backed webhooks the form does not require them — it fills them from the connector definition before saving; the API itself copies nothing); `token` requires `token`, with `tokenLocation` defaulting to `body` and selecting which location-specific field applies; `basic` requires `username` and `password`; `secret_url` requires `token`. Prefer `hmac` when the source system supports it — it is the most secure option; `secret_url` relies only on URL obscurity and suits non-sensitive data or testing.'
27756
27872
  x-celigo-ai-guidance:
27757
27873
  - |-
27758
27874
  ## FIELD BEHAVIOR
@@ -28196,6 +28312,32 @@ components:
28196
28312
  format: objectId
28197
28313
  x-celigo-refModel: httpconnectors
28198
28314
  description: HTTP connector backing this listener when the webhook is provided by an assistant/connector (e.g. Slack); set by the platform for connector-backed listeners.
28315
+ x-celigo-ai-guidance:
28316
+ - |-
28317
+ The save stores the document as sent and copies nothing from the connector: a
28318
+ listener posted with only `provider`, `key` and (optionally) `_httpConnectorId`
28319
+ saves with no `verify`, `algorithm`, `encoding` or `header` (probed for `slack`
28320
+ and `shopify`) — the API requires a credential for the provider and nothing else:
28321
+ without `key` (and no `token`) `slack`, `shopify` and `github` each fail with 422
28322
+ missing_required_field on `webhook.key` ("key is required for slack verification" /
28323
+ "key is required for shopify verification" / "key is required for github
28324
+ verification"), and a `slack` listener posted with `token` and no `key` saves. The
28325
+ listener form fills the verification fields from the connector's
28326
+ `supportedBy.export.preConfiguredFields` on every save (for Slack `verify: hmac`,
28327
+ `algorithm: sha256`, `encoding: base64`, `header: X-Slack-Signature`); an API
28328
+ caller that wants the stored document to match a form-saved one sends them itself.
28329
+ _httpConnectorApiId:
28330
+ type: string
28331
+ format: objectId
28332
+ x-celigo-refModel: httpconnectorapis
28333
+ description: API of a multi-API connector (an entry of the connector's `apis[]`) this listener is bound to — the form's API type, offered in the Simple view; omit for single-API connectors and universal webhooks.
28334
+ examples:
28335
+ - 673702e2f367e6469401dcf6
28336
+ x-celigo-ai-guidance:
28337
+ - |-
28338
+ Stored and echoed as sent on create and GET; a value that is not an ObjectId fails
28339
+ the save with 422 `invalid_field` ("Invalid value … for field
28340
+ 'webhook._httpConnectorApiId'. Reason: BSONError.").
28199
28341
  requestMediaType:
28200
28342
  type: string
28201
28343
  enum:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.209",
3
+ "version": "0.2.211",
4
4
  "private": false,
5
5
  "description": "Public OpenAPI bundles (dist/) and the celigo-cli lint schema pack (schemas.json).",
6
6
  "keywords": [
package/schemas.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "provenance": {
3
3
  "repo": "celigo/integrator-api-specs",
4
- "iasCommit": "b12a7ff2",
5
- "generatedAt": "2026-10-28"
4
+ "iasCommit": "055366b0",
5
+ "generatedAt": "2026-10-30"
6
6
  },
7
7
  "roots": {
8
8
  "aiagent": 128,
@@ -4201,6 +4201,7 @@
4201
4201
  "object"
4202
4202
  ],
4203
4203
  "p": {
4204
+ "_httpConnectorApiId": 0,
4204
4205
  "_httpConnectorId": 0,
4205
4206
  "algorithm": 363,
4206
4207
  "challengeResponseHeaders": 273,
@@ -4229,7 +4230,10 @@
4229
4230
  "tokenQueryParamName": 0,
4230
4231
  "username": 0,
4231
4232
  "verify": 362
4232
- }
4233
+ },
4234
+ "r": [
4235
+ "verify"
4236
+ ]
4233
4237
  },
4234
4238
  {
4235
4239
  "t": [