@proveanything/smartlinks 2.1.14 → 2.1.16

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/openapi.yaml CHANGED
@@ -14952,6 +14952,38 @@ paths:
14952
14952
  description: Unauthorized
14953
14953
  404:
14954
14954
  description: Not found
14955
+ /{groupId}/members:
14956
+ post:
14957
+ tags:
14958
+ - ranges
14959
+ summary: Put an existing tag of the set into a group (by code or chip UID), assigning it if a collection is given.
14960
+ operationId: ranges_addMember
14961
+ security: []
14962
+ parameters:
14963
+ - name: groupId
14964
+ in: path
14965
+ required: true
14966
+ schema:
14967
+ type: string
14968
+ responses:
14969
+ 200:
14970
+ description: Success
14971
+ content:
14972
+ application/json:
14973
+ schema:
14974
+ $ref: "#/components/schemas/AddClaimSetRangeMemberResponse"
14975
+ 400:
14976
+ description: Bad request
14977
+ 401:
14978
+ description: Unauthorized
14979
+ 404:
14980
+ description: Not found
14981
+ requestBody:
14982
+ required: true
14983
+ content:
14984
+ application/json:
14985
+ schema:
14986
+ $ref: "#/components/schemas/AddClaimSetRangeMemberRequest"
14955
14987
  /{rangeId}:
14956
14988
  get:
14957
14989
  tags:
@@ -15041,6 +15073,38 @@ paths:
15041
15073
  application/json:
15042
15074
  schema:
15043
15075
  $ref: "#/components/schemas/AssignClaimSetRangeRequest"
15076
+ /{rangeId}/close:
15077
+ post:
15078
+ tags:
15079
+ - ranges
15080
+ summary: "Close an open range: it becomes a range with the quantity it reached (removed if nothing was minted)."
15081
+ operationId: ranges_close
15082
+ security: []
15083
+ parameters:
15084
+ - name: rangeId
15085
+ in: path
15086
+ required: true
15087
+ schema:
15088
+ type: string
15089
+ responses:
15090
+ 200:
15091
+ description: Success
15092
+ content:
15093
+ application/json:
15094
+ schema:
15095
+ $ref: "#/components/schemas/CloseClaimSetRangeResponse"
15096
+ 400:
15097
+ description: Bad request
15098
+ 401:
15099
+ description: Unauthorized
15100
+ 404:
15101
+ description: Not found
15102
+ requestBody:
15103
+ required: true
15104
+ content:
15105
+ application/json:
15106
+ schema:
15107
+ $ref: "#/components/schemas/ClaimSetScope"
15044
15108
  /{rangeId}/export:
15045
15109
  get:
15046
15110
  tags:
@@ -21235,6 +21299,32 @@ components:
21235
21299
  - id
21236
21300
  - title
21237
21301
  - component
21302
+ ConnectorAction:
21303
+ type: object
21304
+ properties:
21305
+ name:
21306
+ type: string
21307
+ title:
21308
+ type: string
21309
+ description:
21310
+ type: string
21311
+ function:
21312
+ type: string
21313
+ visibility:
21314
+ type: string
21315
+ enum:
21316
+ - admin
21317
+ - member
21318
+ - public
21319
+ input:
21320
+ type: object
21321
+ additionalProperties: true
21322
+ output:
21323
+ type: object
21324
+ additionalProperties: true
21325
+ required:
21326
+ - name
21327
+ - function
21238
21328
  AppConnectorDeclaration:
21239
21329
  type: object
21240
21330
  properties:
@@ -21288,6 +21378,10 @@ components:
21288
21378
  type: array
21289
21379
  items:
21290
21380
  $ref: "#/components/schemas/ConnectorPanel"
21381
+ actions:
21382
+ type: array
21383
+ items:
21384
+ $ref: "#/components/schemas/ConnectorAction"
21291
21385
  aiGuide:
21292
21386
  type: string
21293
21387
  recordId:
@@ -25889,6 +25983,8 @@ components:
25889
25983
  type: string
25890
25984
  namespace:
25891
25985
  type: string
25986
+ kind:
25987
+ $ref: "#/components/schemas/ClaimSetRangeKind"
25892
25988
  name:
25893
25989
  type: string
25894
25990
  notes:
@@ -25942,6 +26038,7 @@ components:
25942
26038
  - id
25943
26039
  - claimSetId
25944
26040
  - namespace
26041
+ - kind
25945
26042
  - name
25946
26043
  - notes
25947
26044
  - startIndex
@@ -25965,6 +26062,8 @@ components:
25965
26062
  CreateClaimSetRangeRequest:
25966
26063
  type: object
25967
26064
  properties:
26065
+ kind:
26066
+ $ref: "#/components/schemas/ClaimSetRangeKind"
25968
26067
  name:
25969
26068
  type: string
25970
26069
  quantity:
@@ -25988,7 +26087,6 @@ components:
25988
26087
  type: string
25989
26088
  required:
25990
26089
  - name
25991
- - quantity
25992
26090
  UpdateClaimSetRangeRequest:
25993
26091
  type: object
25994
26092
  properties:
@@ -26032,6 +26130,10 @@ components:
26032
26130
  type: string
26033
26131
  proofId:
26034
26132
  type: string
26133
+ rangeId:
26134
+ type: string
26135
+ groupId:
26136
+ type: string
26035
26137
  programmedAt:
26036
26138
  type: string
26037
26139
  scans:
@@ -26045,6 +26147,8 @@ components:
26045
26147
  - productId
26046
26148
  - batchId
26047
26149
  - proofId
26150
+ - rangeId
26151
+ - groupId
26048
26152
  - programmedAt
26049
26153
  - scans
26050
26154
  ClaimSetRangeTagsPage:
@@ -26073,6 +26177,41 @@ components:
26073
26177
  required:
26074
26178
  - url
26075
26179
  - remaining
26180
+ AddClaimSetRangeMemberRequest:
26181
+ type: object
26182
+ properties:
26183
+ code:
26184
+ type: string
26185
+ uid:
26186
+ type: string
26187
+ collectionId:
26188
+ type: string
26189
+ productId:
26190
+ type: string
26191
+ batchId:
26192
+ type: string
26193
+ data:
26194
+ type: object
26195
+ additionalProperties: true
26196
+ clear:
26197
+ type: boolean
26198
+ AddClaimSetRangeMemberResponse:
26199
+ type: object
26200
+ properties:
26201
+ tag:
26202
+ $ref: "#/components/schemas/ClaimSetRangeTag"
26203
+ range:
26204
+ $ref: "#/components/schemas/ClaimSetRange"
26205
+ assigned:
26206
+ type: object
26207
+ additionalProperties: true
26208
+ movedFrom:
26209
+ type: string
26210
+ required:
26211
+ - tag
26212
+ - range
26213
+ - assigned
26214
+ - movedFrom
26076
26215
  ImportClaimSetRangeUidsRequest:
26077
26216
  type: object
26078
26217
  properties:
@@ -26273,6 +26412,12 @@ components:
26273
26412
  - ntag424
26274
26413
  - ntag21x
26275
26414
  - qr
26415
+ ClaimSetRangeKind:
26416
+ type: string
26417
+ enum:
26418
+ - range
26419
+ - open
26420
+ - group
26276
26421
  ClaimSetRangeStatus:
26277
26422
  type: string
26278
26423
  enum:
@@ -26281,6 +26426,11 @@ components:
26281
26426
  - sent
26282
26427
  - received
26283
26428
  - assigned
26429
+ - open
26430
+ - group
26431
+ CloseClaimSetRangeResponse:
26432
+ type: object
26433
+ additionalProperties: true
26284
26434
  ClaimSetImportResult:
26285
26435
  type: string
26286
26436
  enum:
@@ -29060,6 +29210,10 @@ components:
29060
29210
  additionalProperties: true
29061
29211
  eventMapping:
29062
29212
  $ref: "#/components/schemas/EventMapping"
29213
+ envelopeFormat:
29214
+ type: string
29215
+ enum:
29216
+ - cloudevents
29063
29217
  connection:
29064
29218
  $ref: "#/components/schemas/FlowConnection"
29065
29219
  fieldMappings:
@@ -29520,6 +29674,8 @@ components:
29520
29674
  EventEnvelope:
29521
29675
  type: object
29522
29676
  properties:
29677
+ specVersion:
29678
+ type: number
29523
29679
  id:
29524
29680
  type: string
29525
29681
  type:
@@ -29547,6 +29703,10 @@ components:
29547
29703
  type: object
29548
29704
  additionalProperties:
29549
29705
  type: string
29706
+ anonymousId:
29707
+ type: string
29708
+ sessionId:
29709
+ type: string
29550
29710
  emailHash:
29551
29711
  type: string
29552
29712
  phoneHash:
@@ -29567,6 +29727,9 @@ components:
29567
29727
  proof:
29568
29728
  type: object
29569
29729
  additionalProperties: true
29730
+ consent:
29731
+ type: object
29732
+ additionalProperties: true
29570
29733
  subject:
29571
29734
  type: object
29572
29735
  additionalProperties: true
@@ -29577,6 +29740,7 @@ components:
29577
29740
  type: object
29578
29741
  additionalProperties: true
29579
29742
  required:
29743
+ - specVersion
29580
29744
  - id
29581
29745
  - type
29582
29746
  - entityType
@@ -29589,9 +29753,12 @@ components:
29589
29753
  - contactId
29590
29754
  - userId
29591
29755
  - externalIds
29756
+ - anonymousId
29757
+ - sessionId
29592
29758
  - identityPolicy
29593
29759
  - product
29594
29760
  - proof
29761
+ - consent
29595
29762
  - subject
29596
29763
  - attributes
29597
29764
  CapturedRequest:
@@ -1030,6 +1030,27 @@ export interface ConnectorPanel {
1030
1030
  /** Exported component name in the app's widgets bundle (manifest `widgets.files`). */
1031
1031
  component: string;
1032
1032
  }
1033
+ /**
1034
+ * A named provider operation invoked ON DEMAND (not by the engine): redeem a reward, enrol a member,
1035
+ * issue a coupon, raise a ticket, send a receipt. Called by an app function (`ctx.sl.connectors.call`),
1036
+ * by the Hub (public route — only `public`, or `member` for a signed-in person) or by the console. The
1037
+ * function receives `{ input, installation, caller }` and returns JSON; it runs with the connector's
1038
+ * own credentials and is told who asked.
1039
+ */
1040
+ export interface ConnectorAction {
1041
+ /** `^[a-zA-Z][a-zA-Z0-9_-]{0,63}$` */
1042
+ name: string;
1043
+ title?: string;
1044
+ description?: string;
1045
+ /** This app's server function implementing it. */
1046
+ function: string;
1047
+ /** Who may invoke it outside functions and the console. Default 'admin'. */
1048
+ visibility?: 'admin' | 'member' | 'public';
1049
+ /** JSON Schema for `input`; `required` fields are checked before the function runs. */
1050
+ input?: Record<string, unknown>;
1051
+ /** JSON Schema for the result (documentation; not enforced). */
1052
+ output?: Record<string, unknown>;
1053
+ }
1033
1054
  /**
1034
1055
  * The connector contract. Every function named here is one of this app's server functions
1035
1056
  * (manifest `functions.definitions`); the engine calls it with collection authority, capped by the
@@ -1092,6 +1113,8 @@ export interface AppConnectorDeclaration {
1092
1113
  lookup?: string;
1093
1114
  };
1094
1115
  panels?: ConnectorPanel[];
1116
+ /** On-demand operations the connector offers (see ConnectorAction). */
1117
+ actions?: ConnectorAction[];
1095
1118
  /** Path (under the app's public files) of a guide the AI mapping assistant reads. */
1096
1119
  aiGuide?: string;
1097
1120
  /**
@@ -129,21 +129,32 @@ export type ClaimSetScope = {
129
129
  partnerId: string;
130
130
  };
131
131
  export type ClaimSetTagType = 'ntag424' | 'ntag21x' | 'qr';
132
- export type ClaimSetRangeStatus = 'minting' | 'minted' | 'sent' | 'received' | 'assigned';
132
+ /**
133
+ * range: a contiguous block of indexes minted up front. open: grows one index per tag programmed on a phone
134
+ * (count unknown in advance), closed into a range later. group: existing tags added by tapping, assigned by
135
+ * hand and moved together; no indexes.
136
+ */
137
+ export type ClaimSetRangeKind = 'range' | 'open' | 'group';
138
+ export type ClaimSetRangeStatus = 'minting' | 'minted' | 'sent' | 'received' | 'assigned' | 'open' | 'group';
133
139
  export interface ClaimSetRange {
134
140
  id: string;
135
141
  claimSetId: string;
136
142
  namespace: string;
143
+ kind: ClaimSetRangeKind;
137
144
  name: string;
138
145
  notes: string | null;
139
- startIndex: number;
140
- endIndex: number;
146
+ /** null for a group */
147
+ startIndex: number | null;
148
+ /** open: the highest index minted so far (null until the first); group: null */
149
+ endIndex: number | null;
150
+ /** range: the block; open: minted so far; group: its members */
141
151
  quantity: number;
142
152
  tagType: ClaimSetTagType;
153
+ /** open ranges and groups are always 'sidekick' */
143
154
  fulfilment: 'printer' | 'sidekick';
144
- /** The stored step: minting | minted | sent | received */
155
+ /** The stored step: minting | minted | sent | received (always 'minted' for open ranges and groups) */
145
156
  stage: 'minting' | 'minted' | 'sent' | 'received';
146
- /** What to show: the stage, or 'assigned' once every tag is assigned */
157
+ /** What to show: the stage, 'open', 'group', or 'assigned' once every tag is assigned */
147
158
  status: ClaimSetRangeStatus;
148
159
  intendedCollectionId: string | null;
149
160
  intendedProductId: string | null;
@@ -162,9 +173,11 @@ export interface ClaimSetRange {
162
173
  updatedAt: string;
163
174
  }
164
175
  export interface CreateClaimSetRangeRequest {
176
+ /** Default 'range'. Owners and admins make ranges and open ranges; assigners may make groups too. */
177
+ kind?: ClaimSetRangeKind;
165
178
  name: string;
166
- /** 1 to 10,000 */
167
- quantity: number;
179
+ /** 1 to 10,000 (a range); ignored for open ranges and groups */
180
+ quantity?: number;
168
181
  /** Pre-assign every tag at mint time (you must administer the collection) */
169
182
  intendedCollectionId?: string;
170
183
  intendedProductId?: string;
@@ -194,6 +207,10 @@ export interface ClaimSetRangeTag {
194
207
  productId: string | null;
195
208
  batchId: string | null;
196
209
  proofId: string | null;
210
+ /** The range it was minted into, if any */
211
+ rangeId: string | null;
212
+ /** The group it was added to, if any */
213
+ groupId: string | null;
197
214
  programmedAt: string | null;
198
215
  scans: number;
199
216
  }
@@ -207,8 +224,42 @@ export interface ClaimSetRangeNextTag extends ClaimSetRangeTag {
207
224
  url: string;
208
225
  piccOffset?: number;
209
226
  mirrorOffset?: number;
210
- remaining: number;
227
+ /** Tags still without a chip; null for an open range (it grows as you go) */
228
+ remaining: number | null;
229
+ }
230
+ /** Add an existing tag of the set to a group, and (with a collection, or clear) assign it as you go. */
231
+ export interface AddClaimSetRangeMemberRequest {
232
+ /** The tag's code, printed or bare… */
233
+ code?: string;
234
+ /** …or its chip UID (14 hex) */
235
+ uid?: string;
236
+ collectionId?: string;
237
+ productId?: string;
238
+ batchId?: string;
239
+ data?: Record<string, unknown>;
240
+ clear?: boolean;
211
241
  }
242
+ export interface AddClaimSetRangeMemberResponse {
243
+ tag: ClaimSetRangeTag;
244
+ range: ClaimSetRange;
245
+ /** The assignment, with the same skips as assign (has_proof, assigned_elsewhere) */
246
+ assigned: {
247
+ changed: number;
248
+ skipped: Array<{
249
+ code: string;
250
+ index: number | null;
251
+ reason: 'other_range' | 'has_proof' | 'assigned_elsewhere';
252
+ collectionId?: string;
253
+ }>;
254
+ };
255
+ /** The group the tag was taken from, if it was in another one */
256
+ movedFrom: string | null;
257
+ }
258
+ /** Closing an open range: the range it became, or that it was removed because nothing was minted. */
259
+ export type CloseClaimSetRangeResponse = ClaimSetRange | {
260
+ id: string;
261
+ deleted: true;
262
+ };
212
263
  export type ClaimSetImportResult = 'ok' | 'unchanged' | 'unknown_code' | 'duplicate_row' | 'index_mismatch' | 'no_uid' | 'bad_uid' | 'duplicate_uid' | 'uid_in_use' | 'uid_conflict';
213
264
  export interface ImportClaimSetRangeUidsRequest {
214
265
  /** The manufacturer's file as CSV text (the file we sent, with UID filled in) */
@@ -92,6 +92,12 @@ export interface IntegrationFlowConfig {
92
92
  };
93
93
  /** Event-sourced flows: fold SmartLinks events into the provider's registered events. */
94
94
  eventMapping?: EventMapping;
95
+ /**
96
+ * Wrap each delivered body as a CloudEvents 1.0 structured event
97
+ * ({ specversion, id, type, source, subject, time, datacontenttype, dataschema, data }) — the shape
98
+ * event buses, lakes and serverless tools consume without custom code.
99
+ */
100
+ envelopeFormat?: 'cloudevents';
95
101
  connection?: FlowConnection;
96
102
  fieldMappings?: FieldMapping[];
97
103
  /** Run this flow through a connector app's functions instead of the built-in mapper/transport. */
@@ -369,6 +375,8 @@ export interface ConnectorLookupResult {
369
375
  * connector's `serialize` / `send`, after the flow's identity policy and event mapping.
370
376
  */
371
377
  export interface EventEnvelope {
378
+ /** Schema version of this envelope. Bumped only when a consumer could break (a field removed or changed). */
379
+ specVersion: number;
372
380
  /** The event's id: stable across retries; use it as the provider's transaction / idempotency id. */
373
381
  id: string;
374
382
  /** Spine event name, e.g. 'interaction.submitted:<typeId>', 'contact.updated', 'tag.scanned:scan_redirect'. */
@@ -384,6 +392,9 @@ export interface EventEnvelope {
384
392
  userId: string | null;
385
393
  /** Ids other systems know this person by, keyed by system (a connector's `provider`). */
386
394
  externalIds: Record<string, string>;
395
+ /** The visitor / device id before anyone signed in (an analytics destination stitches on it later). Under every policy. */
396
+ anonymousId: string | null;
397
+ sessionId: string | null;
387
398
  emailHash?: string | null;
388
399
  phoneHash?: string | null;
389
400
  hashAlgorithm?: 'hmac-sha256' | null;
@@ -403,6 +414,15 @@ export interface EventEnvelope {
403
414
  proof: {
404
415
  id: string;
405
416
  } | null;
417
+ /**
418
+ * The person's communication consent, summarised per channel from the contact's comms state; null
419
+ * when the event is about nobody we hold. A CRM or CDP must not act against it.
420
+ */
421
+ consent: {
422
+ channels: Record<'email' | 'sms' | 'push' | 'whatsapp', 'opted_in' | 'opted_out' | 'suppressed' | 'unknown'>;
423
+ topics: Record<string, boolean>;
424
+ updatedAt: string | null;
425
+ } | null;
406
426
  /** The event's own fields: an interaction's interactionId / outcome / metadata, a scan's codeId / country, a contact's profile. */
407
427
  subject: Record<string, unknown>;
408
428
  /** From the flow's event mapping, when it has one. */
@@ -1,6 +1,6 @@
1
1
  # Smartlinks API Summary
2
2
 
3
- Version: 2.1.14 | Generated: 2026-11-09T13:01:05.900Z
3
+ Version: 2.1.16 | Generated: 2026-11-10T17:19:48.505Z
4
4
 
5
5
  This is a concise summary of all available API functions and types.
6
6
 
@@ -65,7 +65,7 @@ For detailed guides on specific features:
65
65
  - **[Analytics Metadata Conventions](analytics-metadata-conventions.md)** - Standard recommended keys and conventions for analytics metadata fields
66
66
  - **[Loyalty: Points, Members & Earning Rules](loyalty.md)** - Loyalty schemes, automatic point earning via interaction rules, member balances, transaction history, and manual adjustments
67
67
  - **[Integrations](integrations.md)** - Inbound/outbound integration flows + the sealed-secret store; triggers (manual/event/schedule), event patterns, the event envelope (interaction/contact/event sources), identity policy, event mapping, signed deliveries, contact as a target, field mappings
68
- - **[Connectors](connectors.md)** - Connector apps (adapters for one external provider): a manifest `connector` block + server functions (testConnection/describeTarget/sample/fetch/shape/serialize/send/describeEvents/lookup); loyalty and CRM connectors; core does the mapping
68
+ - **[Connectors](connectors.md)** - Connector apps (adapters for one external provider): a manifest `connector` block + server functions (testConnection/describeTarget/sample/fetch/shape/serialize/send/describeEvents/lookup); loyalty and CRM connectors; actions (provider operations on demand); core does the mapping
69
69
  - **[Entitlements](entitlements.md)** - "Is this person gold or above?" answered on demand from signed claims, a connector lookup (cached), or the contact — never a mirrored member base; gates on interaction types and in server functions
70
70
  - **[AI Tools & Skills](ai-tools-and-skills.md)** - The AI capability catalog: skills apps invoke by name (e.g. research.brand), the tools the AI reaches for (web fetch/screenshot/brand assets/image gen), the agent loop, and how apps discover them
71
71
  - **[Deep Link Discovery](deep-link-discovery.md)** - Registering and discovering navigable app states for portal menus and AI orchestration
@@ -3112,6 +3112,19 @@ interface ConnectorPanel {
3112
3112
  }
3113
3113
  ```
3114
3114
 
3115
+ **ConnectorAction** (interface)
3116
+ ```typescript
3117
+ interface ConnectorAction {
3118
+ name: string
3119
+ title?: string
3120
+ description?: string
3121
+ function: string
3122
+ visibility?: 'admin' | 'member' | 'public'
3123
+ input?: Record<string, unknown>
3124
+ output?: Record<string, unknown>
3125
+ }
3126
+ ```
3127
+
3115
3128
  **AppConnectorDeclaration** (interface)
3116
3129
  ```typescript
3117
3130
  interface AppConnectorDeclaration {
@@ -3134,6 +3147,7 @@ interface AppConnectorDeclaration {
3134
3147
  lookup?: string
3135
3148
  }
3136
3149
  panels?: ConnectorPanel[]
3150
+ actions?: ConnectorAction[]
3137
3151
  aiGuide?: string
3138
3152
  recordId?: string
3139
3153
  limits?: { requestsPerSecond?: number; maxEvents?: number; maxAttributes?: number }
@@ -5761,10 +5775,11 @@ interface ClaimSetRange {
5761
5775
  id: string
5762
5776
  claimSetId: string
5763
5777
  namespace: string
5778
+ kind: ClaimSetRangeKind
5764
5779
  name: string
5765
5780
  notes: string | null
5766
- startIndex: number
5767
- endIndex: number
5781
+ startIndex: number | null
5782
+ endIndex: number | null
5768
5783
  quantity: number
5769
5784
  tagType: ClaimSetTagType
5770
5785
  fulfilment: 'printer' | 'sidekick'
@@ -5787,8 +5802,9 @@ interface ClaimSetRange {
5787
5802
  **CreateClaimSetRangeRequest** (interface)
5788
5803
  ```typescript
5789
5804
  interface CreateClaimSetRangeRequest {
5805
+ kind?: ClaimSetRangeKind
5790
5806
  name: string
5791
- quantity: number
5807
+ quantity?: number
5792
5808
  intendedCollectionId?: string
5793
5809
  intendedProductId?: string
5794
5810
  intendedBatchId?: string
@@ -5823,6 +5839,8 @@ interface ClaimSetRangeTag {
5823
5839
  productId: string | null
5824
5840
  batchId: string | null
5825
5841
  proofId: string | null
5842
+ rangeId: string | null
5843
+ groupId: string | null
5826
5844
  programmedAt: string | null
5827
5845
  scans: number
5828
5846
  }
@@ -5836,6 +5854,29 @@ interface ClaimSetRangeTagsPage {
5836
5854
  }
5837
5855
  ```
5838
5856
 
5857
+ **AddClaimSetRangeMemberRequest** (interface)
5858
+ ```typescript
5859
+ interface AddClaimSetRangeMemberRequest {
5860
+ code?: string
5861
+ uid?: string
5862
+ collectionId?: string
5863
+ productId?: string
5864
+ batchId?: string
5865
+ data?: Record<string, unknown>
5866
+ clear?: boolean
5867
+ }
5868
+ ```
5869
+
5870
+ **AddClaimSetRangeMemberResponse** (interface)
5871
+ ```typescript
5872
+ interface AddClaimSetRangeMemberResponse {
5873
+ tag: ClaimSetRangeTag
5874
+ range: ClaimSetRange
5875
+ assigned: { changed: number; skipped: Array<{ code: string; index: number | null; reason: 'other_range' | 'has_proof' | 'assigned_elsewhere'; collectionId?: string }> }
5876
+ movedFrom: string | null
5877
+ }
5878
+ ```
5879
+
5839
5880
  **ImportClaimSetRangeUidsRequest** (interface)
5840
5881
  ```typescript
5841
5882
  interface ImportClaimSetRangeUidsRequest {
@@ -5944,7 +5985,11 @@ type ClaimSetScope = { collectionId: string }
5944
5985
 
5945
5986
  **ClaimSetTagType** = `'ntag424' | 'ntag21x' | 'qr'`
5946
5987
 
5947
- **ClaimSetRangeStatus** = `'minting' | 'minted' | 'sent' | 'received' | 'assigned'`
5988
+ **ClaimSetRangeKind** = `'range' | 'open' | 'group'`
5989
+
5990
+ **ClaimSetRangeStatus** = `'minting' | 'minted' | 'sent' | 'received' | 'assigned' | 'open' | 'group'`
5991
+
5992
+ **CloseClaimSetRangeResponse** = `ClaimSetRange | { id: string`
5948
5993
 
5949
5994
  **ClaimSetImportResult** = ``
5950
5995
 
@@ -7980,6 +8025,7 @@ interface IntegrationFlowConfig {
7980
8025
  signing?: { credentialRef: string; previousCredentialRef?: string }
7981
8026
  identity?: { policy?: IdentityPolicy; hashKeyCredentialRef?: string }
7982
8027
  eventMapping?: EventMapping
8028
+ envelopeFormat?: 'cloudevents'
7983
8029
  connection?: FlowConnection
7984
8030
  fieldMappings?: FieldMapping[]
7985
8031
  connector?: FlowConnectorRef
@@ -8222,6 +8268,7 @@ interface ConnectorLookupResult {
8222
8268
  **EventEnvelope** (interface)
8223
8269
  ```typescript
8224
8270
  interface EventEnvelope {
8271
+ specVersion: number
8225
8272
  id: string
8226
8273
  type: string
8227
8274
  entityType: string | null
@@ -8234,6 +8281,8 @@ interface EventEnvelope {
8234
8281
  contactId: string | null
8235
8282
  userId: string | null
8236
8283
  externalIds: Record<string, string>
8284
+ anonymousId: string | null
8285
+ sessionId: string | null
8237
8286
  emailHash?: string | null
8238
8287
  phoneHash?: string | null
8239
8288
  hashAlgorithm?: 'hmac-sha256' | null
@@ -8243,6 +8292,7 @@ interface EventEnvelope {
8243
8292
  identityPolicy: IdentityPolicy
8244
8293
  product: { id: string; name?: string | null; sku?: string | null; gtin?: string | null; variantId?: string | null; batchId?: string | null } | null
8245
8294
  proof: { id: string } | null
8295
+ consent: { channels: Record<'email' | 'sms' | 'push' | 'whatsapp', 'opted_in' | 'opted_out' | 'suppressed' | 'unknown'>; topics: Record<string, boolean>; updatedAt: string | null } | null
8246
8296
  subject: Record<string, unknown>
8247
8297
  event?: { name: string; attributes: Record<string, unknown>; rule: string | null }
8248
8298
  attributes: Record<string, unknown>
@@ -12445,6 +12495,15 @@ Name, notes, order details, or a stage move (sent to the printer, received).
12445
12495
  **resume**(scope: ClaimSetScope, claimSetId: string, rangeId: string) → `Promise<ClaimSetRange>`
12446
12496
  Finish minting a range that was interrupted.
12447
12497
 
12498
+ **close**(scope: ClaimSetScope, claimSetId: string, rangeId: string) → `Promise<CloseClaimSetRangeResponse>`
12499
+ Close an open range: it becomes a range with the quantity it reached (removed if nothing was minted).
12500
+
12501
+ **addMember**(scope: ClaimSetScope, claimSetId: string, groupId: string, params: AddClaimSetRangeMemberRequest) → `Promise<AddClaimSetRangeMemberResponse>`
12502
+ Put an existing tag of the set into a group (by code or chip UID), assigning it if a collection is given.
12503
+
12504
+ **removeMember**(scope: ClaimSetScope, claimSetId: string, groupId: string, code: string) → `Promise<`
12505
+ Take a tag out of a group. Its assignment is left as it is.
12506
+
12448
12507
  **tags**(scope: ClaimSetScope, claimSetId: string, rangeId: string,
12449
12508
  options: { from?: number; limit?: number; keys?: boolean } = {}) → `Promise<ClaimSetRangeTagsPage>`
12450
12509
  The range's tags in index order, a page at a time (keys: owners/admins only).
@@ -12984,6 +13043,22 @@ Save a connector's non-secret Connect-form values and/or settings. PUT /integrat
12984
13043
  input: Record<string, unknown> & { flowId?: string } = {}) → `Promise<T>`
12985
13044
  Run a connector step from the console: `testConnection` → ConnectorTestResult, `describeTarget` → ConnectorTargetSchema, `sample` → ConnectorRecords, and dry runs of `shape` ({ records }) → ConnectorShapeResult and `serialize` ({ documents }) → ConnectorSerializeResult. The server adds the installation; pass `flowId` to layer that flow's settings. POST /integrations/connectors/:appId/steps/:step
12986
13045
 
13046
+ **runConnectorAction**(collectionId: string,
13047
+ appId: string,
13048
+ action: string,
13049
+ input: Record<string, unknown> = {}) → `Promise<T>`
13050
+ Invoke a connector ACTION from the console (any visibility): redeem, enrol, adjust points, issue a coupon… The connector's function runs with its own credentials and is told who asked. POST /integrations/connectors/:appId/actions/:action { input }
13051
+
13052
+ **listConnectorActions**(collectionId: string,
13053
+ appId: string) → `Promise<`
13054
+ PUBLIC (the Hub, a site): the connector actions the caller may invoke — those declared `public`, plus `member` ones when signed in. GET /public/collection/:collectionId/connectors/:appId/actions
13055
+
13056
+ **callConnectorAction**(collectionId: string,
13057
+ appId: string,
13058
+ action: string,
13059
+ input: Record<string, unknown> = {}) → `Promise<T>`
13060
+ PUBLIC (the Hub, a site): invoke a connector action — e.g. redeem a reward for the signed-in member. 401 SIGN_IN_REQUIRED for a `member` action without a session; 403 for an admin-only one; 400 with `missing[]` when a required input is absent. POST /public/collection/:collectionId/connectors/:appId/actions/:action { input }
13061
+
12987
13062
  ### interactions
12988
13063
 
12989
13064
  **query**(collectionId: string,