@proveanything/smartlinks 1.8.10 → 1.8.12

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
@@ -41,6 +41,7 @@ tags:
41
41
  - name: journeys
42
42
  - name: journeysAnalytics
43
43
  - name: location
44
+ - name: loyalty
44
45
  - name: nfc
45
46
  - name: order
46
47
  - name: product
@@ -3382,6 +3383,39 @@ paths:
3382
3383
  application/json:
3383
3384
  schema:
3384
3385
  $ref: "#/components/schemas/CreateInteractionTypeBody"
3386
+ /admin/collection/{collectionId}/interactions/aggregate:
3387
+ post:
3388
+ tags:
3389
+ - interactions
3390
+ summary: "POST /admin/collection/:collectionId/interactions/counts-by-outcome Returns array of { outcome, count }."
3391
+ operationId: interactions_aggregate
3392
+ security:
3393
+ - bearerAuth: []
3394
+ parameters:
3395
+ - name: collectionId
3396
+ in: path
3397
+ required: true
3398
+ schema:
3399
+ type: string
3400
+ responses:
3401
+ 200:
3402
+ description: Success
3403
+ content:
3404
+ application/json:
3405
+ schema:
3406
+ $ref: "#/components/schemas/AdminInteractionsAggregateResponse"
3407
+ 400:
3408
+ description: Bad request
3409
+ 401:
3410
+ description: Unauthorized
3411
+ 404:
3412
+ description: Not found
3413
+ requestBody:
3414
+ required: true
3415
+ content:
3416
+ application/json:
3417
+ schema:
3418
+ $ref: "#/components/schemas/AdminInteractionsAggregateRequest"
3385
3419
  /admin/collection/{collectionId}/interactions/counts-by-outcome:
3386
3420
  post:
3387
3421
  tags:
@@ -3960,12 +3994,12 @@ paths:
3960
3994
  description: Unauthorized
3961
3995
  404:
3962
3996
  description: Not found
3963
- /admin/collection/{collectionId}/orders:
3997
+ /admin/collection/{collectionId}/loyaltyScheme:
3964
3998
  get:
3965
3999
  tags:
3966
- - order
3967
- summary: List orders for a collection with optional filters and pagination.
3968
- operationId: order_list
4000
+ - loyalty
4001
+ summary: loyalty.list
4002
+ operationId: loyalty_list
3969
4003
  security:
3970
4004
  - bearerAuth: []
3971
4005
  parameters:
@@ -3980,7 +4014,9 @@ paths:
3980
4014
  content:
3981
4015
  application/json:
3982
4016
  schema:
3983
- $ref: "#/components/schemas/ListOrdersResponse"
4017
+ type: array
4018
+ items:
4019
+ $ref: "#/components/schemas/LoyaltyScheme"
3984
4020
  400:
3985
4021
  description: Bad request
3986
4022
  401:
@@ -3989,9 +4025,9 @@ paths:
3989
4025
  description: Not found
3990
4026
  post:
3991
4027
  tags:
3992
- - order
3993
- summary: Create a new order with items.
3994
- operationId: order_create
4028
+ - loyalty
4029
+ summary: loyalty.create
4030
+ operationId: loyalty_create
3995
4031
  security:
3996
4032
  - bearerAuth: []
3997
4033
  parameters:
@@ -4006,7 +4042,7 @@ paths:
4006
4042
  content:
4007
4043
  application/json:
4008
4044
  schema:
4009
- $ref: "#/components/schemas/CreateOrderResponse"
4045
+ $ref: "#/components/schemas/LoyaltyScheme"
4010
4046
  400:
4011
4047
  description: Bad request
4012
4048
  401:
@@ -4018,13 +4054,13 @@ paths:
4018
4054
  content:
4019
4055
  application/json:
4020
4056
  schema:
4021
- $ref: "#/components/schemas/CreateOrderRequest"
4022
- /admin/collection/{collectionId}/orders/analytics/bulk:
4023
- post:
4057
+ $ref: "#/components/schemas/CreateLoyaltySchemeBody"
4058
+ /admin/collection/{collectionId}/loyaltyScheme/{schemeId}:
4059
+ get:
4024
4060
  tags:
4025
- - order
4026
- summary: Get analytics summary for multiple orders at once.
4027
- operationId: order_getBulkAnalytics
4061
+ - loyalty
4062
+ summary: loyalty.get
4063
+ operationId: loyalty_get
4028
4064
  security:
4029
4065
  - bearerAuth: []
4030
4066
  parameters:
@@ -4033,31 +4069,29 @@ paths:
4033
4069
  required: true
4034
4070
  schema:
4035
4071
  type: string
4072
+ - name: schemeId
4073
+ in: path
4074
+ required: true
4075
+ schema:
4076
+ type: string
4036
4077
  responses:
4037
4078
  200:
4038
4079
  description: Success
4039
4080
  content:
4040
4081
  application/json:
4041
4082
  schema:
4042
- $ref: "#/components/schemas/BulkAnalyticsResponse"
4083
+ $ref: "#/components/schemas/LoyaltyScheme"
4043
4084
  400:
4044
4085
  description: Bad request
4045
4086
  401:
4046
4087
  description: Unauthorized
4047
4088
  404:
4048
4089
  description: Not found
4049
- requestBody:
4050
- required: true
4051
- content:
4052
- application/json:
4053
- schema:
4054
- $ref: "#/components/schemas/BulkAnalyticsRequest"
4055
- /admin/collection/{collectionId}/orders/analytics/summary:
4056
- post:
4090
+ patch:
4057
4091
  tags:
4058
- - order
4059
- summary: Get collection-wide analytics summary across all orders.
4060
- operationId: order_getCollectionSummary
4092
+ - loyalty
4093
+ summary: loyalty.update
4094
+ operationId: loyalty_update
4061
4095
  security:
4062
4096
  - bearerAuth: []
4063
4097
  parameters:
@@ -4066,13 +4100,18 @@ paths:
4066
4100
  required: true
4067
4101
  schema:
4068
4102
  type: string
4103
+ - name: schemeId
4104
+ in: path
4105
+ required: true
4106
+ schema:
4107
+ type: string
4069
4108
  responses:
4070
4109
  200:
4071
4110
  description: Success
4072
4111
  content:
4073
4112
  application/json:
4074
4113
  schema:
4075
- $ref: "#/components/schemas/CollectionSummaryResponse"
4114
+ $ref: "#/components/schemas/LoyaltyScheme"
4076
4115
  400:
4077
4116
  description: Bad request
4078
4117
  401:
@@ -4084,13 +4123,12 @@ paths:
4084
4123
  content:
4085
4124
  application/json:
4086
4125
  schema:
4087
- $ref: "#/components/schemas/SummaryRequest"
4088
- /admin/collection/{collectionId}/orders/analytics/{orderId}:
4089
- post:
4126
+ $ref: "#/components/schemas/UpdateLoyaltySchemeBody"
4127
+ delete:
4090
4128
  tags:
4091
- - order
4092
- summary: order.getAnalytics
4093
- operationId: order_getAnalytics
4129
+ - loyalty
4130
+ summary: loyalty.remove
4131
+ operationId: loyalty_remove
4094
4132
  security:
4095
4133
  - bearerAuth: []
4096
4134
  parameters:
@@ -4099,7 +4137,7 @@ paths:
4099
4137
  required: true
4100
4138
  schema:
4101
4139
  type: string
4102
- - name: orderId
4140
+ - name: schemeId
4103
4141
  in: path
4104
4142
  required: true
4105
4143
  schema:
@@ -4110,19 +4148,19 @@ paths:
4110
4148
  content:
4111
4149
  application/json:
4112
4150
  schema:
4113
- $ref: "#/components/schemas/OrderAnalyticsResponse"
4151
+ $ref: "#/components/schemas/LoyaltyScheme"
4114
4152
  400:
4115
4153
  description: Bad request
4116
4154
  401:
4117
4155
  description: Unauthorized
4118
4156
  404:
4119
4157
  description: Not found
4120
- /admin/collection/{collectionId}/orders/analytics/{orderId}/locations:
4121
- post:
4158
+ /admin/collection/{collectionId}/loyaltyScheme/{schemeId}/earningRule:
4159
+ get:
4122
4160
  tags:
4123
- - order
4124
- summary: "Get location-based scan history for an order's tags."
4125
- operationId: order_getLocationHistory
4161
+ - loyalty
4162
+ summary: loyalty.listEarningRules
4163
+ operationId: loyalty_listEarningRules
4126
4164
  security:
4127
4165
  - bearerAuth: []
4128
4166
  parameters:
@@ -4131,7 +4169,7 @@ paths:
4131
4169
  required: true
4132
4170
  schema:
4133
4171
  type: string
4134
- - name: orderId
4172
+ - name: schemeId
4135
4173
  in: path
4136
4174
  required: true
4137
4175
  schema:
@@ -4142,25 +4180,20 @@ paths:
4142
4180
  content:
4143
4181
  application/json:
4144
4182
  schema:
4145
- $ref: "#/components/schemas/LocationResponse"
4183
+ type: array
4184
+ items:
4185
+ $ref: "#/components/schemas/LoyaltyEarningRule"
4146
4186
  400:
4147
4187
  description: Bad request
4148
4188
  401:
4149
4189
  description: Unauthorized
4150
4190
  404:
4151
4191
  description: Not found
4152
- requestBody:
4153
- required: true
4154
- content:
4155
- application/json:
4156
- schema:
4157
- $ref: "#/components/schemas/LocationRequest"
4158
- /admin/collection/{collectionId}/orders/analytics/{orderId}/timeline:
4159
4192
  post:
4160
4193
  tags:
4161
- - order
4162
- summary: "Get chronological timeline of all scan events for an order's tags."
4163
- operationId: order_getTimeline
4194
+ - loyalty
4195
+ summary: loyalty.createEarningRule
4196
+ operationId: loyalty_createEarningRule
4164
4197
  security:
4165
4198
  - bearerAuth: []
4166
4199
  parameters:
@@ -4169,7 +4202,7 @@ paths:
4169
4202
  required: true
4170
4203
  schema:
4171
4204
  type: string
4172
- - name: orderId
4205
+ - name: schemeId
4173
4206
  in: path
4174
4207
  required: true
4175
4208
  schema:
@@ -4180,7 +4213,7 @@ paths:
4180
4213
  content:
4181
4214
  application/json:
4182
4215
  schema:
4183
- $ref: "#/components/schemas/TimelineResponse"
4216
+ $ref: "#/components/schemas/LoyaltyEarningRule"
4184
4217
  400:
4185
4218
  description: Bad request
4186
4219
  401:
@@ -4192,13 +4225,13 @@ paths:
4192
4225
  content:
4193
4226
  application/json:
4194
4227
  schema:
4195
- $ref: "#/components/schemas/TimelineRequest"
4196
- /admin/collection/{collectionId}/orders/ids/{attribute}/{value}:
4228
+ $ref: "#/components/schemas/CreateLoyaltyEarningRuleBody"
4229
+ /admin/collection/{collectionId}/loyaltyScheme/{schemeId}/earningRule/{ruleId}:
4197
4230
  get:
4198
4231
  tags:
4199
- - order
4200
- summary: Get unique order IDs containing items for a specific product.
4201
- operationId: order_getOrderIdsByAttribute
4232
+ - loyalty
4233
+ summary: loyalty.getEarningRule
4234
+ operationId: loyalty_getEarningRule
4202
4235
  security:
4203
4236
  - bearerAuth: []
4204
4237
  parameters:
@@ -4207,12 +4240,12 @@ paths:
4207
4240
  required: true
4208
4241
  schema:
4209
4242
  type: string
4210
- - name: attribute
4243
+ - name: schemeId
4211
4244
  in: path
4212
4245
  required: true
4213
4246
  schema:
4214
4247
  type: string
4215
- - name: value
4248
+ - name: ruleId
4216
4249
  in: path
4217
4250
  required: true
4218
4251
  schema:
@@ -4223,19 +4256,18 @@ paths:
4223
4256
  content:
4224
4257
  application/json:
4225
4258
  schema:
4226
- $ref: "#/components/schemas/GetOrderIdsResponse"
4259
+ $ref: "#/components/schemas/LoyaltyEarningRule"
4227
4260
  400:
4228
4261
  description: Bad request
4229
4262
  401:
4230
4263
  description: Unauthorized
4231
4264
  404:
4232
4265
  description: Not found
4233
- /admin/collection/{collectionId}/orders/lookup:
4234
- post:
4266
+ patch:
4235
4267
  tags:
4236
- - order
4237
- summary: order.lookup
4238
- operationId: order_lookup
4268
+ - loyalty
4269
+ summary: loyalty.updateEarningRule
4270
+ operationId: loyalty_updateEarningRule
4239
4271
  security:
4240
4272
  - bearerAuth: []
4241
4273
  parameters:
@@ -4244,13 +4276,23 @@ paths:
4244
4276
  required: true
4245
4277
  schema:
4246
4278
  type: string
4279
+ - name: schemeId
4280
+ in: path
4281
+ required: true
4282
+ schema:
4283
+ type: string
4284
+ - name: ruleId
4285
+ in: path
4286
+ required: true
4287
+ schema:
4288
+ type: string
4247
4289
  responses:
4248
4290
  200:
4249
4291
  description: Success
4250
4292
  content:
4251
4293
  application/json:
4252
4294
  schema:
4253
- $ref: "#/components/schemas/LookupOrdersResponse"
4295
+ $ref: "#/components/schemas/LoyaltyEarningRule"
4254
4296
  400:
4255
4297
  description: Bad request
4256
4298
  401:
@@ -4262,13 +4304,12 @@ paths:
4262
4304
  content:
4263
4305
  application/json:
4264
4306
  schema:
4265
- $ref: "#/components/schemas/LookupOrdersRequest"
4266
- /admin/collection/{collectionId}/orders/product/{productId}:
4267
- get:
4307
+ $ref: "#/components/schemas/UpdateLoyaltyEarningRuleBody"
4308
+ delete:
4268
4309
  tags:
4269
- - order
4270
- summary: Find all orders containing items with a specific product ID.
4271
- operationId: order_findByProduct
4310
+ - loyalty
4311
+ summary: loyalty.removeEarningRule
4312
+ operationId: loyalty_removeEarningRule
4272
4313
  security:
4273
4314
  - bearerAuth: []
4274
4315
  parameters:
@@ -4277,7 +4318,12 @@ paths:
4277
4318
  required: true
4278
4319
  schema:
4279
4320
  type: string
4280
- - name: productId
4321
+ - name: schemeId
4322
+ in: path
4323
+ required: true
4324
+ schema:
4325
+ type: string
4326
+ - name: ruleId
4281
4327
  in: path
4282
4328
  required: true
4283
4329
  schema:
@@ -4288,19 +4334,19 @@ paths:
4288
4334
  content:
4289
4335
  application/json:
4290
4336
  schema:
4291
- $ref: "#/components/schemas/LookupByProductResponse"
4337
+ $ref: "#/components/schemas/LoyaltyEarningRule"
4292
4338
  400:
4293
4339
  description: Bad request
4294
4340
  401:
4295
4341
  description: Unauthorized
4296
4342
  404:
4297
4343
  description: Not found
4298
- /admin/collection/{collectionId}/orders/product/{productId}/items:
4344
+ /admin/collection/{collectionId}/loyaltyScheme/{schemeId}/member/{contactId}:
4299
4345
  get:
4300
4346
  tags:
4301
- - order
4302
- summary: Get individual order items for a specific product.
4303
- operationId: order_findItemsByProduct
4347
+ - loyalty
4348
+ summary: loyalty.getMember
4349
+ operationId: loyalty_getMember
4304
4350
  security:
4305
4351
  - bearerAuth: []
4306
4352
  parameters:
@@ -4309,7 +4355,12 @@ paths:
4309
4355
  required: true
4310
4356
  schema:
4311
4357
  type: string
4312
- - name: productId
4358
+ - name: schemeId
4359
+ in: path
4360
+ required: true
4361
+ schema:
4362
+ type: string
4363
+ - name: contactId
4313
4364
  in: path
4314
4365
  required: true
4315
4366
  schema:
@@ -4320,19 +4371,19 @@ paths:
4320
4371
  content:
4321
4372
  application/json:
4322
4373
  schema:
4323
- $ref: "#/components/schemas/FindItemsByAttributeResponse"
4374
+ $ref: "#/components/schemas/LoyaltyMember"
4324
4375
  400:
4325
4376
  description: Bad request
4326
4377
  401:
4327
4378
  description: Unauthorized
4328
4379
  404:
4329
4380
  description: Not found
4330
- /admin/collection/{collectionId}/orders/query:
4381
+ /admin/collection/{collectionId}/loyaltyScheme/{schemeId}/member/{contactId}/transaction:
4331
4382
  post:
4332
4383
  tags:
4333
- - order
4334
- summary: order.query
4335
- operationId: order_query
4384
+ - loyalty
4385
+ summary: Manually award or deduct points for a contact.
4386
+ operationId: loyalty_recordTransaction
4336
4387
  security:
4337
4388
  - bearerAuth: []
4338
4389
  parameters:
@@ -4341,13 +4392,23 @@ paths:
4341
4392
  required: true
4342
4393
  schema:
4343
4394
  type: string
4395
+ - name: schemeId
4396
+ in: path
4397
+ required: true
4398
+ schema:
4399
+ type: string
4400
+ - name: contactId
4401
+ in: path
4402
+ required: true
4403
+ schema:
4404
+ type: string
4344
4405
  responses:
4345
4406
  200:
4346
4407
  description: Success
4347
4408
  content:
4348
4409
  application/json:
4349
4410
  schema:
4350
- $ref: "#/components/schemas/QueryOrdersResponse"
4411
+ $ref: "#/components/schemas/LoyaltyTransactionResult"
4351
4412
  400:
4352
4413
  description: Bad request
4353
4414
  401:
@@ -4359,13 +4420,13 @@ paths:
4359
4420
  content:
4360
4421
  application/json:
4361
4422
  schema:
4362
- $ref: "#/components/schemas/QueryOrdersRequest"
4363
- /admin/collection/{collectionId}/orders/reports:
4423
+ $ref: "#/components/schemas/RecordLoyaltyTransactionBody"
4424
+ /admin/collection/{collectionId}/orders:
4364
4425
  get:
4365
4426
  tags:
4366
4427
  - order
4367
- summary: order.reports
4368
- operationId: order_reports
4428
+ summary: List orders for a collection with optional filters and pagination.
4429
+ operationId: order_list
4369
4430
  security:
4370
4431
  - bearerAuth: []
4371
4432
  parameters:
@@ -4380,19 +4441,18 @@ paths:
4380
4441
  content:
4381
4442
  application/json:
4382
4443
  schema:
4383
- $ref: "#/components/schemas/ReportsResponse"
4444
+ $ref: "#/components/schemas/ListOrdersResponse"
4384
4445
  400:
4385
4446
  description: Bad request
4386
4447
  401:
4387
4448
  description: Unauthorized
4388
4449
  404:
4389
4450
  description: Not found
4390
- /admin/collection/{collectionId}/orders/{orderId}:
4391
- get:
4451
+ post:
4392
4452
  tags:
4393
4453
  - order
4394
- summary: Get a single order by ID.
4395
- operationId: order_get
4454
+ summary: Create a new order with items.
4455
+ operationId: order_create
4396
4456
  security:
4397
4457
  - bearerAuth: []
4398
4458
  parameters:
@@ -4401,29 +4461,31 @@ paths:
4401
4461
  required: true
4402
4462
  schema:
4403
4463
  type: string
4404
- - name: orderId
4405
- in: path
4406
- required: true
4407
- schema:
4408
- type: string
4409
4464
  responses:
4410
4465
  200:
4411
4466
  description: Success
4412
4467
  content:
4413
4468
  application/json:
4414
4469
  schema:
4415
- $ref: "#/components/schemas/GetOrderResponse"
4470
+ $ref: "#/components/schemas/CreateOrderResponse"
4416
4471
  400:
4417
4472
  description: Bad request
4418
4473
  401:
4419
4474
  description: Unauthorized
4420
4475
  404:
4421
4476
  description: Not found
4422
- put:
4477
+ requestBody:
4478
+ required: true
4479
+ content:
4480
+ application/json:
4481
+ schema:
4482
+ $ref: "#/components/schemas/CreateOrderRequest"
4483
+ /admin/collection/{collectionId}/orders/analytics/bulk:
4484
+ post:
4423
4485
  tags:
4424
4486
  - order
4425
- summary: Update order status or metadata.
4426
- operationId: order_update
4487
+ summary: Get analytics summary for multiple orders at once.
4488
+ operationId: order_getBulkAnalytics
4427
4489
  security:
4428
4490
  - bearerAuth: []
4429
4491
  parameters:
@@ -4432,18 +4494,13 @@ paths:
4432
4494
  required: true
4433
4495
  schema:
4434
4496
  type: string
4435
- - name: orderId
4436
- in: path
4437
- required: true
4438
- schema:
4439
- type: string
4440
4497
  responses:
4441
4498
  200:
4442
4499
  description: Success
4443
4500
  content:
4444
4501
  application/json:
4445
4502
  schema:
4446
- $ref: "#/components/schemas/UpdateOrderResponse"
4503
+ $ref: "#/components/schemas/BulkAnalyticsResponse"
4447
4504
  400:
4448
4505
  description: Bad request
4449
4506
  401:
@@ -4455,12 +4512,13 @@ paths:
4455
4512
  content:
4456
4513
  application/json:
4457
4514
  schema:
4458
- $ref: "#/components/schemas/UpdateOrderRequest"
4459
- delete:
4515
+ $ref: "#/components/schemas/BulkAnalyticsRequest"
4516
+ /admin/collection/{collectionId}/orders/analytics/summary:
4517
+ post:
4460
4518
  tags:
4461
4519
  - order
4462
- summary: Delete an order and all its items (cascade delete).
4463
- operationId: order_remove
4520
+ summary: Get collection-wide analytics summary across all orders.
4521
+ operationId: order_getCollectionSummary
4464
4522
  security:
4465
4523
  - bearerAuth: []
4466
4524
  parameters:
@@ -4469,30 +4527,31 @@ paths:
4469
4527
  required: true
4470
4528
  schema:
4471
4529
  type: string
4472
- - name: orderId
4473
- in: path
4474
- required: true
4475
- schema:
4476
- type: string
4477
4530
  responses:
4478
4531
  200:
4479
4532
  description: Success
4480
4533
  content:
4481
4534
  application/json:
4482
4535
  schema:
4483
- $ref: "#/components/schemas/DeleteOrderResponse"
4536
+ $ref: "#/components/schemas/CollectionSummaryResponse"
4484
4537
  400:
4485
4538
  description: Bad request
4486
4539
  401:
4487
4540
  description: Unauthorized
4488
4541
  404:
4489
4542
  description: Not found
4490
- /admin/collection/{collectionId}/orders/{orderId}/items:
4491
- get:
4543
+ requestBody:
4544
+ required: true
4545
+ content:
4546
+ application/json:
4547
+ schema:
4548
+ $ref: "#/components/schemas/SummaryRequest"
4549
+ /admin/collection/{collectionId}/orders/analytics/{orderId}:
4550
+ post:
4492
4551
  tags:
4493
4552
  - order
4494
- summary: Get items from an order with pagination support.
4495
- operationId: order_getItems
4553
+ summary: order.getAnalytics
4554
+ operationId: order_getAnalytics
4496
4555
  security:
4497
4556
  - bearerAuth: []
4498
4557
  parameters:
@@ -4512,18 +4571,19 @@ paths:
4512
4571
  content:
4513
4572
  application/json:
4514
4573
  schema:
4515
- $ref: "#/components/schemas/GetOrderItemsResponse"
4574
+ $ref: "#/components/schemas/OrderAnalyticsResponse"
4516
4575
  400:
4517
4576
  description: Bad request
4518
4577
  401:
4519
4578
  description: Unauthorized
4520
4579
  404:
4521
4580
  description: Not found
4581
+ /admin/collection/{collectionId}/orders/analytics/{orderId}/locations:
4522
4582
  post:
4523
4583
  tags:
4524
4584
  - order
4525
- summary: Add additional items to an existing order.
4526
- operationId: order_addItems
4585
+ summary: "Get location-based scan history for an order's tags."
4586
+ operationId: order_getLocationHistory
4527
4587
  security:
4528
4588
  - bearerAuth: []
4529
4589
  parameters:
@@ -4543,7 +4603,7 @@ paths:
4543
4603
  content:
4544
4604
  application/json:
4545
4605
  schema:
4546
- $ref: "#/components/schemas/AddItemsResponse"
4606
+ $ref: "#/components/schemas/LocationResponse"
4547
4607
  400:
4548
4608
  description: Bad request
4549
4609
  401:
@@ -4555,13 +4615,13 @@ paths:
4555
4615
  content:
4556
4616
  application/json:
4557
4617
  schema:
4558
- $ref: "#/components/schemas/AddItemsRequest"
4559
- /admin/collection/{collectionId}/owner/{userId}:
4560
- get:
4618
+ $ref: "#/components/schemas/LocationRequest"
4619
+ /admin/collection/{collectionId}/orders/analytics/{orderId}/timeline:
4620
+ post:
4561
4621
  tags:
4562
- - contact
4563
- summary: contact.getUser
4564
- operationId: contact_getUser
4622
+ - order
4623
+ summary: "Get chronological timeline of all scan events for an order's tags."
4624
+ operationId: order_getTimeline
4565
4625
  security:
4566
4626
  - bearerAuth: []
4567
4627
  parameters:
@@ -4570,7 +4630,408 @@ paths:
4570
4630
  required: true
4571
4631
  schema:
4572
4632
  type: string
4573
- - name: userId
4633
+ - name: orderId
4634
+ in: path
4635
+ required: true
4636
+ schema:
4637
+ type: string
4638
+ responses:
4639
+ 200:
4640
+ description: Success
4641
+ content:
4642
+ application/json:
4643
+ schema:
4644
+ $ref: "#/components/schemas/TimelineResponse"
4645
+ 400:
4646
+ description: Bad request
4647
+ 401:
4648
+ description: Unauthorized
4649
+ 404:
4650
+ description: Not found
4651
+ requestBody:
4652
+ required: true
4653
+ content:
4654
+ application/json:
4655
+ schema:
4656
+ $ref: "#/components/schemas/TimelineRequest"
4657
+ /admin/collection/{collectionId}/orders/ids/{attribute}/{value}:
4658
+ get:
4659
+ tags:
4660
+ - order
4661
+ summary: Get unique order IDs containing items for a specific product.
4662
+ operationId: order_getOrderIdsByAttribute
4663
+ security:
4664
+ - bearerAuth: []
4665
+ parameters:
4666
+ - name: collectionId
4667
+ in: path
4668
+ required: true
4669
+ schema:
4670
+ type: string
4671
+ - name: attribute
4672
+ in: path
4673
+ required: true
4674
+ schema:
4675
+ type: string
4676
+ - name: value
4677
+ in: path
4678
+ required: true
4679
+ schema:
4680
+ type: string
4681
+ responses:
4682
+ 200:
4683
+ description: Success
4684
+ content:
4685
+ application/json:
4686
+ schema:
4687
+ $ref: "#/components/schemas/GetOrderIdsResponse"
4688
+ 400:
4689
+ description: Bad request
4690
+ 401:
4691
+ description: Unauthorized
4692
+ 404:
4693
+ description: Not found
4694
+ /admin/collection/{collectionId}/orders/lookup:
4695
+ post:
4696
+ tags:
4697
+ - order
4698
+ summary: order.lookup
4699
+ operationId: order_lookup
4700
+ security:
4701
+ - bearerAuth: []
4702
+ parameters:
4703
+ - name: collectionId
4704
+ in: path
4705
+ required: true
4706
+ schema:
4707
+ type: string
4708
+ responses:
4709
+ 200:
4710
+ description: Success
4711
+ content:
4712
+ application/json:
4713
+ schema:
4714
+ $ref: "#/components/schemas/LookupOrdersResponse"
4715
+ 400:
4716
+ description: Bad request
4717
+ 401:
4718
+ description: Unauthorized
4719
+ 404:
4720
+ description: Not found
4721
+ requestBody:
4722
+ required: true
4723
+ content:
4724
+ application/json:
4725
+ schema:
4726
+ $ref: "#/components/schemas/LookupOrdersRequest"
4727
+ /admin/collection/{collectionId}/orders/product/{productId}:
4728
+ get:
4729
+ tags:
4730
+ - order
4731
+ summary: Find all orders containing items with a specific product ID.
4732
+ operationId: order_findByProduct
4733
+ security:
4734
+ - bearerAuth: []
4735
+ parameters:
4736
+ - name: collectionId
4737
+ in: path
4738
+ required: true
4739
+ schema:
4740
+ type: string
4741
+ - name: productId
4742
+ in: path
4743
+ required: true
4744
+ schema:
4745
+ type: string
4746
+ responses:
4747
+ 200:
4748
+ description: Success
4749
+ content:
4750
+ application/json:
4751
+ schema:
4752
+ $ref: "#/components/schemas/LookupByProductResponse"
4753
+ 400:
4754
+ description: Bad request
4755
+ 401:
4756
+ description: Unauthorized
4757
+ 404:
4758
+ description: Not found
4759
+ /admin/collection/{collectionId}/orders/product/{productId}/items:
4760
+ get:
4761
+ tags:
4762
+ - order
4763
+ summary: Get individual order items for a specific product.
4764
+ operationId: order_findItemsByProduct
4765
+ security:
4766
+ - bearerAuth: []
4767
+ parameters:
4768
+ - name: collectionId
4769
+ in: path
4770
+ required: true
4771
+ schema:
4772
+ type: string
4773
+ - name: productId
4774
+ in: path
4775
+ required: true
4776
+ schema:
4777
+ type: string
4778
+ responses:
4779
+ 200:
4780
+ description: Success
4781
+ content:
4782
+ application/json:
4783
+ schema:
4784
+ $ref: "#/components/schemas/FindItemsByAttributeResponse"
4785
+ 400:
4786
+ description: Bad request
4787
+ 401:
4788
+ description: Unauthorized
4789
+ 404:
4790
+ description: Not found
4791
+ /admin/collection/{collectionId}/orders/query:
4792
+ post:
4793
+ tags:
4794
+ - order
4795
+ summary: order.query
4796
+ operationId: order_query
4797
+ security:
4798
+ - bearerAuth: []
4799
+ parameters:
4800
+ - name: collectionId
4801
+ in: path
4802
+ required: true
4803
+ schema:
4804
+ type: string
4805
+ responses:
4806
+ 200:
4807
+ description: Success
4808
+ content:
4809
+ application/json:
4810
+ schema:
4811
+ $ref: "#/components/schemas/QueryOrdersResponse"
4812
+ 400:
4813
+ description: Bad request
4814
+ 401:
4815
+ description: Unauthorized
4816
+ 404:
4817
+ description: Not found
4818
+ requestBody:
4819
+ required: true
4820
+ content:
4821
+ application/json:
4822
+ schema:
4823
+ $ref: "#/components/schemas/QueryOrdersRequest"
4824
+ /admin/collection/{collectionId}/orders/reports:
4825
+ get:
4826
+ tags:
4827
+ - order
4828
+ summary: order.reports
4829
+ operationId: order_reports
4830
+ security:
4831
+ - bearerAuth: []
4832
+ parameters:
4833
+ - name: collectionId
4834
+ in: path
4835
+ required: true
4836
+ schema:
4837
+ type: string
4838
+ responses:
4839
+ 200:
4840
+ description: Success
4841
+ content:
4842
+ application/json:
4843
+ schema:
4844
+ $ref: "#/components/schemas/ReportsResponse"
4845
+ 400:
4846
+ description: Bad request
4847
+ 401:
4848
+ description: Unauthorized
4849
+ 404:
4850
+ description: Not found
4851
+ /admin/collection/{collectionId}/orders/{orderId}:
4852
+ get:
4853
+ tags:
4854
+ - order
4855
+ summary: Get a single order by ID.
4856
+ operationId: order_get
4857
+ security:
4858
+ - bearerAuth: []
4859
+ parameters:
4860
+ - name: collectionId
4861
+ in: path
4862
+ required: true
4863
+ schema:
4864
+ type: string
4865
+ - name: orderId
4866
+ in: path
4867
+ required: true
4868
+ schema:
4869
+ type: string
4870
+ responses:
4871
+ 200:
4872
+ description: Success
4873
+ content:
4874
+ application/json:
4875
+ schema:
4876
+ $ref: "#/components/schemas/GetOrderResponse"
4877
+ 400:
4878
+ description: Bad request
4879
+ 401:
4880
+ description: Unauthorized
4881
+ 404:
4882
+ description: Not found
4883
+ put:
4884
+ tags:
4885
+ - order
4886
+ summary: Update order status or metadata.
4887
+ operationId: order_update
4888
+ security:
4889
+ - bearerAuth: []
4890
+ parameters:
4891
+ - name: collectionId
4892
+ in: path
4893
+ required: true
4894
+ schema:
4895
+ type: string
4896
+ - name: orderId
4897
+ in: path
4898
+ required: true
4899
+ schema:
4900
+ type: string
4901
+ responses:
4902
+ 200:
4903
+ description: Success
4904
+ content:
4905
+ application/json:
4906
+ schema:
4907
+ $ref: "#/components/schemas/UpdateOrderResponse"
4908
+ 400:
4909
+ description: Bad request
4910
+ 401:
4911
+ description: Unauthorized
4912
+ 404:
4913
+ description: Not found
4914
+ requestBody:
4915
+ required: true
4916
+ content:
4917
+ application/json:
4918
+ schema:
4919
+ $ref: "#/components/schemas/UpdateOrderRequest"
4920
+ delete:
4921
+ tags:
4922
+ - order
4923
+ summary: Delete an order and all its items (cascade delete).
4924
+ operationId: order_remove
4925
+ security:
4926
+ - bearerAuth: []
4927
+ parameters:
4928
+ - name: collectionId
4929
+ in: path
4930
+ required: true
4931
+ schema:
4932
+ type: string
4933
+ - name: orderId
4934
+ in: path
4935
+ required: true
4936
+ schema:
4937
+ type: string
4938
+ responses:
4939
+ 200:
4940
+ description: Success
4941
+ content:
4942
+ application/json:
4943
+ schema:
4944
+ $ref: "#/components/schemas/DeleteOrderResponse"
4945
+ 400:
4946
+ description: Bad request
4947
+ 401:
4948
+ description: Unauthorized
4949
+ 404:
4950
+ description: Not found
4951
+ /admin/collection/{collectionId}/orders/{orderId}/items:
4952
+ get:
4953
+ tags:
4954
+ - order
4955
+ summary: Get items from an order with pagination support.
4956
+ operationId: order_getItems
4957
+ security:
4958
+ - bearerAuth: []
4959
+ parameters:
4960
+ - name: collectionId
4961
+ in: path
4962
+ required: true
4963
+ schema:
4964
+ type: string
4965
+ - name: orderId
4966
+ in: path
4967
+ required: true
4968
+ schema:
4969
+ type: string
4970
+ responses:
4971
+ 200:
4972
+ description: Success
4973
+ content:
4974
+ application/json:
4975
+ schema:
4976
+ $ref: "#/components/schemas/GetOrderItemsResponse"
4977
+ 400:
4978
+ description: Bad request
4979
+ 401:
4980
+ description: Unauthorized
4981
+ 404:
4982
+ description: Not found
4983
+ post:
4984
+ tags:
4985
+ - order
4986
+ summary: Add additional items to an existing order.
4987
+ operationId: order_addItems
4988
+ security:
4989
+ - bearerAuth: []
4990
+ parameters:
4991
+ - name: collectionId
4992
+ in: path
4993
+ required: true
4994
+ schema:
4995
+ type: string
4996
+ - name: orderId
4997
+ in: path
4998
+ required: true
4999
+ schema:
5000
+ type: string
5001
+ responses:
5002
+ 200:
5003
+ description: Success
5004
+ content:
5005
+ application/json:
5006
+ schema:
5007
+ $ref: "#/components/schemas/AddItemsResponse"
5008
+ 400:
5009
+ description: Bad request
5010
+ 401:
5011
+ description: Unauthorized
5012
+ 404:
5013
+ description: Not found
5014
+ requestBody:
5015
+ required: true
5016
+ content:
5017
+ application/json:
5018
+ schema:
5019
+ $ref: "#/components/schemas/AddItemsRequest"
5020
+ /admin/collection/{collectionId}/owner/{userId}:
5021
+ get:
5022
+ tags:
5023
+ - contact
5024
+ summary: contact.getUser
5025
+ operationId: contact_getUser
5026
+ security:
5027
+ - bearerAuth: []
5028
+ parameters:
5029
+ - name: collectionId
5030
+ in: path
5031
+ required: true
5032
+ schema:
5033
+ type: string
5034
+ - name: userId
4574
5035
  in: path
4575
5036
  required: true
4576
5037
  schema:
@@ -8240,6 +8701,157 @@ paths:
8240
8701
  description: Unauthorized
8241
8702
  404:
8242
8703
  description: Not found
8704
+ /public/collection/{collectionId}/loyaltyScheme:
8705
+ get:
8706
+ tags:
8707
+ - loyalty
8708
+ summary: List active schemes for a collection.
8709
+ operationId: loyalty_publicList
8710
+ security: []
8711
+ parameters:
8712
+ - name: collectionId
8713
+ in: path
8714
+ required: true
8715
+ schema:
8716
+ type: string
8717
+ responses:
8718
+ 200:
8719
+ description: Success
8720
+ content:
8721
+ application/json:
8722
+ schema:
8723
+ type: array
8724
+ items:
8725
+ $ref: "#/components/schemas/LoyaltyScheme"
8726
+ 400:
8727
+ description: Bad request
8728
+ 401:
8729
+ description: Unauthorized
8730
+ 404:
8731
+ description: Not found
8732
+ /public/collection/{collectionId}/loyaltyScheme/me:
8733
+ get:
8734
+ tags:
8735
+ - loyalty
8736
+ summary: "List active earning rules for a scheme — useful for showing \"how to earn\" in a loyalty UI."
8737
+ operationId: loyalty_publicGetMe
8738
+ security: []
8739
+ parameters:
8740
+ - name: collectionId
8741
+ in: path
8742
+ required: true
8743
+ schema:
8744
+ type: string
8745
+ responses:
8746
+ 200:
8747
+ description: Success
8748
+ content:
8749
+ application/json:
8750
+ schema:
8751
+ type: array
8752
+ items:
8753
+ $ref: "#/components/schemas/LoyaltySchemeWithMembership"
8754
+ 400:
8755
+ description: Bad request
8756
+ 401:
8757
+ description: Unauthorized
8758
+ 404:
8759
+ description: Not found
8760
+ /public/collection/{collectionId}/loyaltyScheme/{schemeId}:
8761
+ get:
8762
+ tags:
8763
+ - loyalty
8764
+ summary: List active schemes for a collection.
8765
+ operationId: loyalty_publicGet
8766
+ security: []
8767
+ parameters:
8768
+ - name: collectionId
8769
+ in: path
8770
+ required: true
8771
+ schema:
8772
+ type: string
8773
+ - name: schemeId
8774
+ in: path
8775
+ required: true
8776
+ schema:
8777
+ type: string
8778
+ responses:
8779
+ 200:
8780
+ description: Success
8781
+ content:
8782
+ application/json:
8783
+ schema:
8784
+ $ref: "#/components/schemas/LoyaltyScheme"
8785
+ 400:
8786
+ description: Bad request
8787
+ 401:
8788
+ description: Unauthorized
8789
+ 404:
8790
+ description: Not found
8791
+ /public/collection/{collectionId}/loyaltyScheme/{schemeId}/earningRule:
8792
+ get:
8793
+ tags:
8794
+ - loyalty
8795
+ summary: List active schemes for a collection.
8796
+ operationId: loyalty_publicListEarningRules
8797
+ security: []
8798
+ parameters:
8799
+ - name: collectionId
8800
+ in: path
8801
+ required: true
8802
+ schema:
8803
+ type: string
8804
+ - name: schemeId
8805
+ in: path
8806
+ required: true
8807
+ schema:
8808
+ type: string
8809
+ responses:
8810
+ 200:
8811
+ description: Success
8812
+ content:
8813
+ application/json:
8814
+ schema:
8815
+ type: array
8816
+ items:
8817
+ $ref: "#/components/schemas/LoyaltyEarningRule"
8818
+ 400:
8819
+ description: Bad request
8820
+ 401:
8821
+ description: Unauthorized
8822
+ 404:
8823
+ description: Not found
8824
+ /public/collection/{collectionId}/loyaltyScheme/{schemeId}/member/me:
8825
+ get:
8826
+ tags:
8827
+ - loyalty
8828
+ summary: "Get all active schemes with the caller's membership embedded in each."
8829
+ operationId: loyalty_publicGetMine
8830
+ security: []
8831
+ parameters:
8832
+ - name: collectionId
8833
+ in: path
8834
+ required: true
8835
+ schema:
8836
+ type: string
8837
+ - name: schemeId
8838
+ in: path
8839
+ required: true
8840
+ schema:
8841
+ type: string
8842
+ responses:
8843
+ 200:
8844
+ description: Success
8845
+ content:
8846
+ application/json:
8847
+ schema:
8848
+ $ref: "#/components/schemas/LoyaltyMember"
8849
+ 400:
8850
+ description: Bad request
8851
+ 401:
8852
+ description: Unauthorized
8853
+ 404:
8854
+ description: Not found
8243
8855
  /public/collection/{collectionId}/product/{productId}/asset:
8244
8856
  get:
8245
8857
  tags:
@@ -15745,34 +16357,131 @@ components:
15745
16357
  type: boolean
15746
16358
  order:
15747
16359
  type: string
15748
- enum:
15749
- - ASC
15750
- - DESC
15751
- include:
16360
+ enum:
16361
+ - ASC
16362
+ - DESC
16363
+ include:
16364
+ type: array
16365
+ items:
16366
+ type: string
16367
+ enum:
16368
+ - interaction
16369
+ AdminInteractionsCountsByOutcomeRequest:
16370
+ type: object
16371
+ properties:
16372
+ appId:
16373
+ type: string
16374
+ interactionId:
16375
+ type: string
16376
+ scope:
16377
+ type: string
16378
+ from:
16379
+ type: string
16380
+ to:
16381
+ type: string
16382
+ limit:
16383
+ type: number
16384
+ dedupeLatest:
16385
+ type: boolean
16386
+ idField:
16387
+ $ref: "#/components/schemas/IdField"
16388
+ AdminInteractionsAggregateRequest:
16389
+ type: object
16390
+ properties:
16391
+ appId:
16392
+ type: string
16393
+ interactionId:
16394
+ type: string
16395
+ interactionIds:
16396
+ type: array
16397
+ items:
16398
+ type: string
16399
+ scope:
16400
+ type: string
16401
+ outcome:
16402
+ type: string
16403
+ from:
16404
+ type: string
16405
+ to:
16406
+ type: string
16407
+ limit:
16408
+ type: number
16409
+ dedupeLatest:
16410
+ type: boolean
16411
+ groupBy:
16412
+ type: string
16413
+ aggregate:
16414
+ type: object
16415
+ additionalProperties: true
16416
+ field:
16417
+ type: string
16418
+ ops:
15752
16419
  type: array
15753
16420
  items:
15754
16421
  type: string
15755
16422
  enum:
15756
- - interaction
15757
- AdminInteractionsCountsByOutcomeRequest:
16423
+ - count
16424
+ - sum
16425
+ - avg
16426
+ - min
16427
+ - max
16428
+ required:
16429
+ - groupBy
16430
+ - aggregate
16431
+ - field
16432
+ - ops
16433
+ AdminInteractionsAggregateResponse:
15758
16434
  type: object
15759
16435
  properties:
15760
- appId:
15761
- type: string
15762
- interactionId:
15763
- type: string
15764
- scope:
15765
- type: string
15766
- from:
16436
+ groupBy:
15767
16437
  type: string
15768
- to:
16438
+ aggregate:
16439
+ type: object
16440
+ additionalProperties: true
16441
+ field:
15769
16442
  type: string
15770
- limit:
15771
- type: number
16443
+ ops:
16444
+ type: array
16445
+ items:
16446
+ type: string
16447
+ enum:
16448
+ - count
16449
+ - sum
16450
+ - avg
16451
+ - min
16452
+ - max
15772
16453
  dedupeLatest:
15773
16454
  type: boolean
15774
- idField:
15775
- $ref: "#/components/schemas/IdField"
16455
+ rows:
16456
+ type: array
16457
+ items:
16458
+ $ref: "#/components/schemas/AdminInteractionsAggregateRow"
16459
+ required:
16460
+ - groupBy
16461
+ - aggregate
16462
+ - field
16463
+ - ops
16464
+ - rows
16465
+ AdminInteractionsAggregateRow:
16466
+ type: object
16467
+ properties:
16468
+ groupValue:
16469
+ type: string
16470
+ eventCount:
16471
+ type: number
16472
+ count:
16473
+ type: number
16474
+ sum:
16475
+ type: number
16476
+ avg:
16477
+ type: number
16478
+ min:
16479
+ type: number
16480
+ max:
16481
+ type: number
16482
+ required:
16483
+ - groupValue
16484
+ - eventCount
15776
16485
  PublicInteractionsCountsByOutcomeRequest:
15777
16486
  type: object
15778
16487
  properties:
@@ -16442,6 +17151,293 @@ components:
16442
17151
  required:
16443
17152
  - items
16444
17153
  - count
17154
+ LoyaltyScheme:
17155
+ type: object
17156
+ properties:
17157
+ id:
17158
+ type: string
17159
+ orgId:
17160
+ type: string
17161
+ collectionId:
17162
+ type: string
17163
+ name:
17164
+ type: string
17165
+ type:
17166
+ type: string
17167
+ active:
17168
+ type: boolean
17169
+ createdAt:
17170
+ type: string
17171
+ updatedAt:
17172
+ type: string
17173
+ deletedAt:
17174
+ type: string
17175
+ data:
17176
+ $ref: "#/components/schemas/DataBlock"
17177
+ owner:
17178
+ $ref: "#/components/schemas/DataBlock"
17179
+ admin:
17180
+ $ref: "#/components/schemas/DataBlock"
17181
+ required:
17182
+ - id
17183
+ - orgId
17184
+ - collectionId
17185
+ - name
17186
+ - type
17187
+ - active
17188
+ - createdAt
17189
+ - updatedAt
17190
+ - deletedAt
17191
+ - data
17192
+ LoyaltyMember:
17193
+ type: object
17194
+ properties:
17195
+ id:
17196
+ type: string
17197
+ orgId:
17198
+ type: string
17199
+ collectionId:
17200
+ type: string
17201
+ schemeId:
17202
+ type: string
17203
+ contactId:
17204
+ type: string
17205
+ userId:
17206
+ type: string
17207
+ balance:
17208
+ type: number
17209
+ lifetimePoints:
17210
+ type: number
17211
+ createdAt:
17212
+ type: string
17213
+ updatedAt:
17214
+ type: string
17215
+ data:
17216
+ $ref: "#/components/schemas/DataBlock"
17217
+ owner:
17218
+ $ref: "#/components/schemas/DataBlock"
17219
+ admin:
17220
+ $ref: "#/components/schemas/DataBlock"
17221
+ required:
17222
+ - id
17223
+ - orgId
17224
+ - collectionId
17225
+ - schemeId
17226
+ - contactId
17227
+ - userId
17228
+ - balance
17229
+ - lifetimePoints
17230
+ - createdAt
17231
+ - updatedAt
17232
+ - data
17233
+ LoyaltyTransaction:
17234
+ type: object
17235
+ properties:
17236
+ id:
17237
+ type: string
17238
+ orgId:
17239
+ type: string
17240
+ collectionId:
17241
+ type: string
17242
+ schemeId:
17243
+ type: string
17244
+ memberId:
17245
+ type: string
17246
+ points:
17247
+ type: number
17248
+ reason:
17249
+ type: string
17250
+ idempotencyKey:
17251
+ type: string
17252
+ metadata:
17253
+ $ref: "#/components/schemas/DataBlock"
17254
+ createdAt:
17255
+ type: string
17256
+ required:
17257
+ - id
17258
+ - orgId
17259
+ - collectionId
17260
+ - schemeId
17261
+ - memberId
17262
+ - points
17263
+ - reason
17264
+ - idempotencyKey
17265
+ - metadata
17266
+ - createdAt
17267
+ LoyaltyEarningRule:
17268
+ type: object
17269
+ properties:
17270
+ id:
17271
+ type: string
17272
+ orgId:
17273
+ type: string
17274
+ collectionId:
17275
+ type: string
17276
+ schemeId:
17277
+ type: string
17278
+ interactionId:
17279
+ type: string
17280
+ points:
17281
+ type: number
17282
+ conditions:
17283
+ type: object
17284
+ additionalProperties:
17285
+ type: string
17286
+ maxPerContact:
17287
+ type: number
17288
+ cooldownHours:
17289
+ type: number
17290
+ active:
17291
+ type: boolean
17292
+ createdAt:
17293
+ type: string
17294
+ updatedAt:
17295
+ type: string
17296
+ data:
17297
+ $ref: "#/components/schemas/DataBlock"
17298
+ required:
17299
+ - id
17300
+ - orgId
17301
+ - collectionId
17302
+ - schemeId
17303
+ - interactionId
17304
+ - points
17305
+ - conditions
17306
+ - maxPerContact
17307
+ - cooldownHours
17308
+ - active
17309
+ - createdAt
17310
+ - updatedAt
17311
+ - data
17312
+ LoyaltySchemeWithMembership:
17313
+ type: object
17314
+ properties:
17315
+ member:
17316
+ type: string
17317
+ enum:
17318
+ - owner
17319
+ - admin
17320
+ required:
17321
+ - member
17322
+ LoyaltyTransactionResult:
17323
+ type: object
17324
+ properties:
17325
+ member:
17326
+ $ref: "#/components/schemas/LoyaltyMember"
17327
+ transaction:
17328
+ $ref: "#/components/schemas/LoyaltyTransaction"
17329
+ required:
17330
+ - member
17331
+ - transaction
17332
+ LoyaltyPaginationParams:
17333
+ type: object
17334
+ properties:
17335
+ limit:
17336
+ type: number
17337
+ offset:
17338
+ type: number
17339
+ LoyaltyPaginatedResult:
17340
+ type: object
17341
+ properties:
17342
+ items:
17343
+ type: array
17344
+ items:
17345
+ $ref: "#/components/schemas/T"
17346
+ limit:
17347
+ type: number
17348
+ offset:
17349
+ type: number
17350
+ required:
17351
+ - items
17352
+ - limit
17353
+ - offset
17354
+ CreateLoyaltySchemeBody:
17355
+ type: object
17356
+ properties:
17357
+ name:
17358
+ type: string
17359
+ type:
17360
+ type: string
17361
+ active:
17362
+ type: boolean
17363
+ data:
17364
+ $ref: "#/components/schemas/DataBlock"
17365
+ owner:
17366
+ $ref: "#/components/schemas/DataBlock"
17367
+ admin:
17368
+ $ref: "#/components/schemas/DataBlock"
17369
+ required:
17370
+ - name
17371
+ - type
17372
+ UpdateLoyaltySchemeBody:
17373
+ type: object
17374
+ properties:
17375
+ name:
17376
+ type: string
17377
+ type:
17378
+ type: string
17379
+ active:
17380
+ type: boolean
17381
+ data:
17382
+ $ref: "#/components/schemas/DataBlock"
17383
+ owner:
17384
+ $ref: "#/components/schemas/DataBlock"
17385
+ admin:
17386
+ $ref: "#/components/schemas/DataBlock"
17387
+ CreateLoyaltyEarningRuleBody:
17388
+ type: object
17389
+ properties:
17390
+ interactionId:
17391
+ type: string
17392
+ points:
17393
+ type: number
17394
+ conditions:
17395
+ type: object
17396
+ additionalProperties:
17397
+ type: string
17398
+ maxPerContact:
17399
+ type: number
17400
+ cooldownHours:
17401
+ type: number
17402
+ active:
17403
+ type: boolean
17404
+ data:
17405
+ $ref: "#/components/schemas/DataBlock"
17406
+ required:
17407
+ - interactionId
17408
+ - points
17409
+ UpdateLoyaltyEarningRuleBody:
17410
+ type: object
17411
+ properties:
17412
+ points:
17413
+ type: number
17414
+ conditions:
17415
+ type: object
17416
+ additionalProperties:
17417
+ type: string
17418
+ maxPerContact:
17419
+ type: number
17420
+ cooldownHours:
17421
+ type: number
17422
+ active:
17423
+ type: boolean
17424
+ data:
17425
+ $ref: "#/components/schemas/DataBlock"
17426
+ RecordLoyaltyTransactionBody:
17427
+ type: object
17428
+ properties:
17429
+ points:
17430
+ type: number
17431
+ reason:
17432
+ type: string
17433
+ idempotencyKey:
17434
+ type: string
17435
+ metadata:
17436
+ $ref: "#/components/schemas/DataBlock"
17437
+ userId:
17438
+ type: string
17439
+ required:
17440
+ - points
16445
17441
  NfcTagInfo:
16446
17442
  type: object
16447
17443
  properties: