@feastalytics/cli 0.1.7 → 0.1.8

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/cli.js CHANGED
@@ -8665,6 +8665,77 @@ var CLI_MANIFEST = {
8665
8665
  "SCANNER"
8666
8666
  ],
8667
8667
  "tools": [
8668
+ {
8669
+ "id": "ads_activate_entity",
8670
+ "domain": "ads",
8671
+ "description": "Take a Meta campaign, ad set or ad from PAUSED to ACTIVE. This spends real money \u2014 call it only after the human has explicitly confirmed they want this live. Pausing is the other tool: ads_update_entity with status PAUSED. Activating a parent does NOT activate its children, so a structure that was published paused has to be activated from the top down \u2014 campaign, then ad set, then ad. Activating a child whose parent is still paused succeeds at Meta and delivers nothing, so the response reports pausedAncestors and willDeliver; if willDeliver is false the entity is live in name only and you should say so rather than reporting success. setAdCampaignStatus is the shortcut for a campaign Feastalytics published, because that one cascades to every level at once.",
8672
+ "type": "mutation",
8673
+ "path": [
8674
+ "api",
8675
+ "ads",
8676
+ "facebook",
8677
+ "activateEntity"
8678
+ ],
8679
+ "inputJsonSchema": {
8680
+ "type": "object",
8681
+ "properties": {
8682
+ "adAccountId": {
8683
+ "type": "string",
8684
+ "minLength": 1
8685
+ },
8686
+ "entityType": {
8687
+ "type": "string",
8688
+ "enum": [
8689
+ "campaign",
8690
+ "adSet",
8691
+ "ad"
8692
+ ]
8693
+ },
8694
+ "entityId": {
8695
+ "type": "string",
8696
+ "minLength": 1
8697
+ }
8698
+ },
8699
+ "required": [
8700
+ "adAccountId",
8701
+ "entityType",
8702
+ "entityId"
8703
+ ],
8704
+ "additionalProperties": false,
8705
+ "$schema": "http://json-schema.org/draft-07/schema#"
8706
+ }
8707
+ },
8708
+ {
8709
+ "id": "ads_create_dataset",
8710
+ "domain": "ads",
8711
+ "description": "Create a dataset (Meta pixel) on an ad account, for a restaurant that has none. Call ads_get_datasets first: an account usually already has one, a second dataset splits a funnel's events in two, and datasets cannot be deleted. Creating it connects it to nothing \u2014 write the returned id to the organization's layout config with updateBrandIdentity, which is what makes the funnel fire it and what the onboarding task reads.",
8712
+ "type": "mutation",
8713
+ "path": [
8714
+ "api",
8715
+ "ads",
8716
+ "facebook",
8717
+ "createDataset"
8718
+ ],
8719
+ "inputJsonSchema": {
8720
+ "type": "object",
8721
+ "properties": {
8722
+ "adAccountId": {
8723
+ "type": "string",
8724
+ "minLength": 1
8725
+ },
8726
+ "name": {
8727
+ "type": "string",
8728
+ "minLength": 1
8729
+ }
8730
+ },
8731
+ "required": [
8732
+ "adAccountId",
8733
+ "name"
8734
+ ],
8735
+ "additionalProperties": false,
8736
+ "$schema": "http://json-schema.org/draft-07/schema#"
8737
+ }
8738
+ },
8668
8739
  {
8669
8740
  "id": "ads_get_ad_accounts",
8670
8741
  "domain": "ads",
@@ -8818,6 +8889,69 @@ var CLI_MANIFEST = {
8818
8889
  "$schema": "http://json-schema.org/draft-07/schema#"
8819
8890
  }
8820
8891
  },
8892
+ {
8893
+ "id": "ads_update_entity",
8894
+ "domain": "ads",
8895
+ "description": "Change budget, name or pause state on a Meta campaign, ad set or ad. This is the lever the re-evaluation loop turns: scale a winner or throttle a loser by moving its daily budget. adAccountId must be the account that actually owns the entity, and is rejected otherwise. Budgets are integer cents and replace the current value rather than adjusting it \u2014 read the entity with ads_get_ad_entities first, and confirm the new number with the human, because it starts spending differently the moment it lands. An entity carries either a daily or a lifetime budget, never both. status only accepts PAUSED: pausing one ad is what this is for, while going live spends money and belongs to setAdCampaignStatus, which cascades. Creative content cannot be edited at all \u2014 Meta creatives are immutable, so new copy or media means a new ad.",
8896
+ "type": "mutation",
8897
+ "path": [
8898
+ "api",
8899
+ "ads",
8900
+ "facebook",
8901
+ "updateEntity"
8902
+ ],
8903
+ "inputJsonSchema": {
8904
+ "type": "object",
8905
+ "properties": {
8906
+ "adAccountId": {
8907
+ "type": "string",
8908
+ "minLength": 1
8909
+ },
8910
+ "entityType": {
8911
+ "type": "string",
8912
+ "enum": [
8913
+ "campaign",
8914
+ "adSet",
8915
+ "ad"
8916
+ ]
8917
+ },
8918
+ "entityId": {
8919
+ "type": "string",
8920
+ "minLength": 1
8921
+ },
8922
+ "fields": {
8923
+ "type": "object",
8924
+ "properties": {
8925
+ "name": {
8926
+ "type": "string",
8927
+ "minLength": 1
8928
+ },
8929
+ "dailyBudgetCents": {
8930
+ "type": "integer",
8931
+ "exclusiveMinimum": 0
8932
+ },
8933
+ "lifetimeBudgetCents": {
8934
+ "type": "integer",
8935
+ "exclusiveMinimum": 0
8936
+ },
8937
+ "status": {
8938
+ "type": "string",
8939
+ "const": "PAUSED"
8940
+ }
8941
+ },
8942
+ "additionalProperties": false
8943
+ }
8944
+ },
8945
+ "required": [
8946
+ "adAccountId",
8947
+ "entityType",
8948
+ "entityId",
8949
+ "fields"
8950
+ ],
8951
+ "additionalProperties": false,
8952
+ "$schema": "http://json-schema.org/draft-07/schema#"
8953
+ }
8954
+ },
8821
8955
  {
8822
8956
  "id": "applyAutomationTemplate",
8823
8957
  "domain": "automations",
@@ -12985,6 +13119,53 @@ var CLI_MANIFEST = {
12985
13119
  "$schema": "http://json-schema.org/draft-07/schema#"
12986
13120
  }
12987
13121
  },
13122
+ {
13123
+ "id": "createRecruitmentCreatives",
13124
+ "domain": "creators",
13125
+ "description": "Generate the five AI recruitment ad creatives a restaurant runs to source creators. Pass campaignId and the tool resolves the campaign's recruitment offer itself, creating one only if the campaign has none \u2014 that offer is what groups the creatives, stamps the Meta campaign onto the strategy, and carries the monthly sourcing cap, so creatives generated without it land in a shared bucket and are attached to nothing. Pass offerId instead only when you already have the exact offer; one of the two is required, because without an offer the creatives would be generated, charged for, and attached to nothing. force regenerates every type, deleting and replacing the existing creatives rather than filling gaps; without it only missing types are generated. Each generation calls an image model per missing type, so force costs a full set.",
13126
+ "type": "mutation",
13127
+ "path": [
13128
+ "api",
13129
+ "dfy",
13130
+ "generateInfluencerCreative"
13131
+ ],
13132
+ "inputJsonSchema": {
13133
+ "type": "object",
13134
+ "properties": {
13135
+ "offerId": {
13136
+ "type": "string"
13137
+ },
13138
+ "campaignId": {
13139
+ "type": "string"
13140
+ },
13141
+ "locationId": {
13142
+ "type": "string"
13143
+ },
13144
+ "foodCredit": {
13145
+ "type": "number",
13146
+ "minimum": 1
13147
+ },
13148
+ "photoUrl": {
13149
+ "type": "string"
13150
+ },
13151
+ "photoUrls": {
13152
+ "type": "array",
13153
+ "items": {
13154
+ "type": "string"
13155
+ }
13156
+ },
13157
+ "force": {
13158
+ "type": "boolean"
13159
+ }
13160
+ },
13161
+ "required": [
13162
+ "locationId",
13163
+ "foodCredit"
13164
+ ],
13165
+ "additionalProperties": false,
13166
+ "$schema": "http://json-schema.org/draft-07/schema#"
13167
+ }
13168
+ },
12988
13169
  {
12989
13170
  "id": "decideCreatorSubmission",
12990
13171
  "domain": "creators",
@@ -13141,6 +13322,31 @@ var CLI_MANIFEST = {
13141
13322
  "$schema": "http://json-schema.org/draft-07/schema#"
13142
13323
  }
13143
13324
  },
13325
+ {
13326
+ "id": "deleteMembersProgramReward",
13327
+ "domain": "membersProgram",
13328
+ "description": "Remove a members program reward. This is how an orphan gets cleaned up \u2014 a reward no automation's awardReward grants can never reach a guest and holds the members program short of complete. The catalog item is left alone, because it may be a real POS menu item or be used by another reward. Guests who already redeemed keep what they were given; this only stops it being offered again.",
13329
+ "type": "mutation",
13330
+ "path": [
13331
+ "api",
13332
+ "membersProgram",
13333
+ "deleteReward"
13334
+ ],
13335
+ "inputJsonSchema": {
13336
+ "type": "object",
13337
+ "properties": {
13338
+ "rewardId": {
13339
+ "type": "string",
13340
+ "minLength": 1
13341
+ }
13342
+ },
13343
+ "required": [
13344
+ "rewardId"
13345
+ ],
13346
+ "additionalProperties": false,
13347
+ "$schema": "http://json-schema.org/draft-07/schema#"
13348
+ }
13349
+ },
13144
13350
  {
13145
13351
  "id": "describeData",
13146
13352
  "domain": "data",
@@ -13252,6 +13458,18 @@ var CLI_MANIFEST = {
13252
13458
  "$schema": "http://json-schema.org/draft-07/schema#"
13253
13459
  }
13254
13460
  },
13461
+ {
13462
+ "id": "getBillingStatus",
13463
+ "domain": "core",
13464
+ "description": 'Whether this organization is paid up, and on what. hasAccess is the one to read for "can they use the product": it means paid and not mid-charge. needsPayment is its inverse for the states worth acting on \u2014 PENDING, FAILED, or a charge in flight \u2014 and is what the dashboard polls to decide whether to block the app behind a payment form. currentTier and subscriptionStatus describe the plan; initialDepositCents is in cents. Read-only: every write here moves real money and stays in the dashboard. existingOrganizations lists *other* organizations billed under the same billing admin, with their names and tiers \u2014 they are not this organization, and it is empty for per-organization billing.',
13465
+ "type": "query",
13466
+ "path": [
13467
+ "api",
13468
+ "organization",
13469
+ "checkPaymentStatus"
13470
+ ],
13471
+ "inputJsonSchema": null
13472
+ },
13255
13473
  {
13256
13474
  "id": "getCampaign",
13257
13475
  "domain": "campaigns",
@@ -13867,7 +14085,7 @@ var CLI_MANIFEST = {
13867
14085
  {
13868
14086
  "id": "listFunnelDrafts",
13869
14087
  "domain": "funnel",
13870
- "description": "List funnel drafts for the organization, optionally filtered by referrer or status.",
14088
+ "description": "List funnel drafts for the organization as summaries (id, referrer, campaign, status, edit counts), optionally filtered by referrer or status. Use getFunnelDraft for a draft's full edits.",
13871
14089
  "type": "query",
13872
14090
  "path": [
13873
14091
  "api",
@@ -14285,1926 +14503,182 @@ Example - opted-in members with more than 5 visits, newest first:
14285
14503
  },
14286
14504
  "filter": {
14287
14505
  "description": 'Required. A filter tree. One column per leaf, as the column name prefixed with $. Leaf: {"$<column>": <predicate>}. Combine with {"type":"and","filters":[...]} or {"type":"or","filters":[...]}. Predicates by column type - string: {"string":"Jane","match":"EQ"|"NEQ"|"IN"|"ENDS_WITH"} where IN means contains, or {"strings":["a","b"]} for any-of. number: {"number":5,"match":"GT"|"GTE"|"LT"|"LTE"|"EQ"|"NEQ"}. boolean: {"boolean":true} with no match key. datetime/date: {"datetime":"2026-01-01T00:00:00.000Z","match":"GTE"}. Nullable columns also accept {"match":"NULL"} or {"match":"NOT_NULL"}. Example: {"type":"and","filters":[{"$optIn":{"boolean":true}},{"$progress":{"number":5,"match":"GT"}}]}'
14288
- }
14289
- },
14290
- "required": [
14291
- "type",
14292
- "filter"
14293
- ],
14294
- "additionalProperties": false,
14295
- "description": 'Restrict the set to matching rows. Example: {"type":"filter","filter":{"$eventType":{"strings":["order","rewardAwarded"]}}}'
14296
- },
14297
- {
14298
- "type": "object",
14299
- "properties": {
14300
- "type": {
14301
- "type": "string",
14302
- "const": "pivot"
14303
- },
14304
- "name": {
14305
- "type": "string",
14306
- "description": "A link name from describeData's links for the current object type. Replaces the set with that linked object type, so later commands apply to the new type."
14307
- }
14308
- },
14309
- "required": [
14310
- "type",
14311
- "name"
14312
- ],
14313
- "additionalProperties": false,
14314
- "description": 'Traverse a link. Example: {"type":"pivot","name":"orderItem"} on interface.order gives its line items.'
14315
- },
14316
- {
14317
- "type": "object",
14318
- "properties": {
14319
- "type": {
14320
- "type": "string",
14321
- "const": "aggregate"
14322
- },
14323
- "aggregate": {
14324
- "description": 'Required. Group and aggregate, replacing the row shape with the grouped and aggregated columns only. Shape: {"aggregate":{"$<column>":"SUM"|"MAX"|"MIN"|"AVG"|"COUNT"},"groupBy":{"$<column>":"EXACT"}}. Example - revenue by location: {"aggregate":{"$amount":"SUM"},"groupBy":{"$locationId":"EXACT"}}'
14325
- }
14326
- },
14327
- "required": [
14328
- "type",
14329
- "aggregate"
14330
- ],
14331
- "additionalProperties": false,
14332
- "description": 'Group and aggregate. Example: {"type":"aggregate","aggregate":{"aggregate":{"$amount":"SUM"},"groupBy":{"$locationId":"EXACT"}}}'
14333
- },
14334
- {
14335
- "type": "object",
14336
- "properties": {
14337
- "type": {
14338
- "type": "string",
14339
- "const": "join"
14340
- },
14341
- "name": {
14342
- "type": "string",
14343
- "description": "A link name from describeData for the current object type."
14344
- },
14345
- "fields": {
14346
- "type": "array",
14347
- "items": {
14348
- "type": "string"
14349
- },
14350
- "description": "Columns to pull from the linked object type."
14351
- }
14352
- },
14353
- "required": [
14354
- "type",
14355
- "name",
14356
- "fields"
14357
- ],
14358
- "additionalProperties": false,
14359
- "description": 'Widen each row with columns from a linked object, keeping the current object type. Example: {"type":"join","name":"order","fields":["closedAt","amount"]}'
14360
- }
14361
- ]
14362
- },
14363
- "description": "Ordered list of commands, each narrowing or reshaping the set before the fetch. Omit to fetch the object type unfiltered. pivot and join must come before any aggregate."
14364
- },
14365
- "args": {
14366
- "type": "object",
14367
- "properties": {
14368
- "limit": {
14369
- "type": "integer",
14370
- "exclusiveMinimum": 0,
14371
- "maximum": 1e3,
14372
- "description": "Rows to return. Defaults to 100, maximum 1000."
14373
- },
14374
- "cursor": {
14375
- "type": "integer",
14376
- "minimum": 0,
14377
- "description": "Row offset. Pass the nextCursor from the previous response to page; a missing nextCursor means there are no more rows."
14378
- },
14379
- "order": {
14380
- "type": "object",
14381
- "properties": {
14382
- "field": {
14383
- "type": "string"
14384
- },
14385
- "direction": {
14386
- "type": "string",
14387
- "enum": [
14388
- "ASC",
14389
- "DESC"
14390
- ]
14391
- }
14392
- },
14393
- "required": [
14394
- "field",
14395
- "direction"
14396
- ],
14397
- "additionalProperties": false,
14398
- "description": 'Sort order. Example: {"field":"eventTime","direction":"DESC"}'
14399
- },
14400
- "fields": {
14401
- "type": "array",
14402
- "items": {
14403
- "type": "string"
14404
- },
14405
- "description": "Columns to return. Omit for all of them. The main lever for keeping responses under the payload cap on wide object types."
14406
- }
14407
- },
14408
- "additionalProperties": false
14409
- }
14410
- },
14411
- "required": [
14412
- "schemaName",
14413
- "objectTypeName"
14414
- ],
14415
- "additionalProperties": false,
14416
- "$schema": "http://json-schema.org/draft-07/schema#"
14417
- }
14418
- },
14419
- {
14420
- "id": "saveAutomationEdits",
14421
- "domain": "automations",
14422
- "description": "Promote an automation draft to production \u2014 this writes to live automations and real guests start receiving the result. Refuses if any touched automation changed since the draft was staged, in which case re-stage against the current state. Marks the draft promoted on success.",
14423
- "type": "mutation",
14424
- "path": [
14425
- "api",
14426
- "automation",
14427
- "saveEdits"
14428
- ],
14429
- "inputJsonSchema": {
14430
- "type": "object",
14431
- "properties": {
14432
- "draftId": {
14433
- "type": "string"
14434
- }
14435
- },
14436
- "required": [
14437
- "draftId"
14438
- ],
14439
- "additionalProperties": false,
14440
- "$schema": "http://json-schema.org/draft-07/schema#"
14441
- }
14442
- },
14443
- {
14444
- "id": "saveFunnelEdits",
14445
- "domain": "funnel",
14446
- "description": "Apply funnel edits to production and save. Accepts either a draftId (applies the draft's staged edits, creates any screens staged with stageFunnelScreen, then marks it promoted) or an inline edits array. This writes to the live funnel.",
14447
- "type": "mutation",
14448
- "path": [
14449
- "api",
14450
- "layoutEngine",
14451
- "screens",
14452
- "saveEdits"
14453
- ],
14454
- "inputJsonSchema": {
14455
- "type": "object",
14456
- "properties": {
14457
- "referrer": {
14458
- "type": "string"
14459
- },
14460
- "campaignId": {
14461
- "type": "string"
14462
- },
14463
- "variantId": {
14464
- "type": "string"
14465
- },
14466
- "draftId": {
14467
- "type": "string"
14468
- },
14469
- "edits": {
14470
- "type": "array",
14471
- "items": {
14472
- "type": "object",
14473
- "properties": {
14474
- "screenId": {
14475
- "type": "string"
14476
- },
14477
- "edit": {
14478
- "anyOf": [
14479
- {
14480
- "type": "object",
14481
- "properties": {
14482
- "type": {
14483
- "type": "string",
14484
- "const": "create"
14485
- },
14486
- "renderable": {
14487
- "anyOf": [
14488
- {
14489
- "allOf": [
14490
- {
14491
- "anyOf": [
14492
- {
14493
- "type": "object",
14494
- "properties": {
14495
- "id": {
14496
- "type": "string"
14497
- },
14498
- "type": {
14499
- "type": "string",
14500
- "const": "text"
14501
- },
14502
- "text": {
14503
- "type": "object",
14504
- "properties": {
14505
- "align": {
14506
- "type": "string",
14507
- "enum": [
14508
- "left",
14509
- "center",
14510
- "right",
14511
- "justify"
14512
- ]
14513
- },
14514
- "segments": {
14515
- "type": "array",
14516
- "items": {
14517
- "type": "object",
14518
- "properties": {
14519
- "text": {
14520
- "type": "string"
14521
- },
14522
- "italic": {
14523
- "type": "boolean"
14524
- },
14525
- "underline": {
14526
- "type": "boolean"
14527
- },
14528
- "strikethrough": {
14529
- "type": "boolean"
14530
- },
14531
- "color": {
14532
- "anyOf": [
14533
- {
14534
- "type": "string",
14535
- "pattern": "^#[0-9A-Fa-f]{3,8}$"
14536
- },
14537
- {
14538
- "type": "string"
14539
- }
14540
- ]
14541
- },
14542
- "fontWeight": {
14543
- "type": "string",
14544
- "enum": [
14545
- "bold",
14546
- "normal",
14547
- "light",
14548
- "medium",
14549
- "semibold",
14550
- "thin",
14551
- "extrabold"
14552
- ]
14553
- },
14554
- "variant": {
14555
- "type": "string",
14556
- "enum": [
14557
- "h1",
14558
- "h2",
14559
- "h3",
14560
- "h4",
14561
- "h5",
14562
- "h6",
14563
- "subtitle1",
14564
- "subtitle2",
14565
- "body1",
14566
- "body2",
14567
- "caption",
14568
- "button",
14569
- "overline",
14570
- "inherit"
14571
- ]
14572
- },
14573
- "fontFamily": {
14574
- "type": "string"
14575
- },
14576
- "link": {
14577
- "type": "string"
14578
- }
14579
- },
14580
- "required": [
14581
- "text"
14582
- ],
14583
- "additionalProperties": false
14584
- }
14585
- }
14586
- },
14587
- "required": [
14588
- "segments"
14589
- ],
14590
- "additionalProperties": false
14591
- }
14592
- },
14593
- "required": [
14594
- "id",
14595
- "type",
14596
- "text"
14597
- ],
14598
- "additionalProperties": false
14599
- },
14600
- {
14601
- "type": "object",
14602
- "properties": {
14603
- "id": {
14604
- "type": "string"
14605
- },
14606
- "type": {
14607
- "type": "string",
14608
- "const": "image"
14609
- },
14610
- "image": {
14611
- "type": "object",
14612
- "properties": {
14613
- "src": {
14614
- "type": "string"
14615
- },
14616
- "alt": {
14617
- "type": "string"
14618
- },
14619
- "size": {
14620
- "type": "string",
14621
- "enum": [
14622
- "small",
14623
- "medium",
14624
- "large",
14625
- "xl"
14626
- ]
14627
- },
14628
- "maxHeight": {
14629
- "type": "number"
14630
- },
14631
- "maxWidth": {
14632
- "type": "number"
14633
- },
14634
- "objectFit": {
14635
- "type": "string",
14636
- "enum": [
14637
- "contain",
14638
- "cover",
14639
- "fill",
14640
- "none",
14641
- "scale-down"
14642
- ]
14643
- },
14644
- "borderRadius": {
14645
- "type": "number"
14646
- },
14647
- "crop": {
14648
- "type": "object",
14649
- "properties": {
14650
- "x": {
14651
- "type": "number"
14652
- },
14653
- "y": {
14654
- "type": "number"
14655
- },
14656
- "width": {
14657
- "type": "number"
14658
- },
14659
- "height": {
14660
- "type": "number"
14661
- },
14662
- "croppedImageUrl": {
14663
- "type": "string"
14664
- },
14665
- "cropPosition": {
14666
- "type": "object",
14667
- "properties": {
14668
- "x": {
14669
- "type": "number"
14670
- },
14671
- "y": {
14672
- "type": "number"
14673
- }
14674
- },
14675
- "required": [
14676
- "x",
14677
- "y"
14678
- ],
14679
- "additionalProperties": false
14680
- },
14681
- "zoom": {
14682
- "type": "number"
14683
- }
14684
- },
14685
- "required": [
14686
- "x",
14687
- "y",
14688
- "width",
14689
- "height",
14690
- "croppedImageUrl"
14691
- ],
14692
- "additionalProperties": false
14693
- }
14694
- },
14695
- "required": [
14696
- "src"
14697
- ],
14698
- "additionalProperties": false
14699
- }
14700
- },
14701
- "required": [
14702
- "id",
14703
- "type",
14704
- "image"
14705
- ],
14706
- "additionalProperties": false
14707
- },
14708
- {
14709
- "type": "object",
14710
- "properties": {
14711
- "id": {
14712
- "type": "string"
14713
- },
14714
- "type": {
14715
- "type": "string",
14716
- "const": "carousel"
14717
- },
14718
- "carousel": {
14719
- "type": "object",
14720
- "properties": {
14721
- "images": {
14722
- "type": "array",
14723
- "items": {
14724
- "type": "string"
14725
- }
14726
- },
14727
- "alt": {
14728
- "type": "string"
14729
- },
14730
- "maxHeight": {
14731
- "type": "number"
14732
- },
14733
- "maxWidth": {
14734
- "type": "number"
14735
- },
14736
- "objectFit": {
14737
- "type": "string",
14738
- "enum": [
14739
- "contain",
14740
- "cover",
14741
- "fill",
14742
- "none",
14743
- "scale-down"
14744
- ]
14745
- },
14746
- "borderRadius": {
14747
- "type": "number"
14748
- }
14749
- },
14750
- "required": [
14751
- "images"
14752
- ],
14753
- "additionalProperties": false
14754
- }
14755
- },
14756
- "required": [
14757
- "id",
14758
- "type",
14759
- "carousel"
14760
- ],
14761
- "additionalProperties": false,
14762
- "description": "Displays multiple images in a swipeable carousel format. Users can swipe through the image array. Supports the same styling options as single images including dimensions, object fit, and border radius."
14763
- },
14764
- {
14765
- "type": "object",
14766
- "properties": {
14767
- "id": {
14768
- "type": "string"
14769
- },
14770
- "type": {
14771
- "type": "string",
14772
- "const": "button"
14773
- },
14774
- "button": {
14775
- "type": "object",
14776
- "properties": {
14777
- "label": {
14778
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/0"
14779
- },
14780
- "variant": {
14781
- "type": "string",
14782
- "enum": [
14783
- "contained",
14784
- "outlined",
14785
- "text"
14786
- ]
14787
- },
14788
- "backgroundColor": {
14789
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/0/properties/text/properties/segments/items/properties/color"
14790
- },
14791
- "outlineColor": {
14792
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/0/properties/text/properties/segments/items/properties/color"
14793
- },
14794
- "destination": {
14795
- "anyOf": [
14796
- {
14797
- "type": "object",
14798
- "properties": {
14799
- "type": {
14800
- "type": "string",
14801
- "const": "external"
14802
- },
14803
- "external": {
14804
- "type": "object",
14805
- "properties": {
14806
- "url": {
14807
- "type": "string"
14808
- }
14809
- },
14810
- "required": [
14811
- "url"
14812
- ],
14813
- "additionalProperties": false
14814
- }
14815
- },
14816
- "required": [
14817
- "type",
14818
- "external"
14819
- ],
14820
- "additionalProperties": false
14821
- },
14822
- {
14823
- "type": "object",
14824
- "properties": {
14825
- "type": {
14826
- "type": "string",
14827
- "const": "internal"
14828
- },
14829
- "internal": {
14830
- "type": "object",
14831
- "properties": {
14832
- "screenId": {
14833
- "type": "string"
14834
- }
14835
- },
14836
- "required": [
14837
- "screenId"
14838
- ],
14839
- "additionalProperties": false
14840
- }
14841
- },
14842
- "required": [
14843
- "type",
14844
- "internal"
14845
- ],
14846
- "additionalProperties": false
14847
- },
14848
- {
14849
- "type": "object",
14850
- "properties": {
14851
- "type": {
14852
- "type": "string",
14853
- "const": "back"
14854
- },
14855
- "back": {
14856
- "type": "object",
14857
- "properties": {},
14858
- "additionalProperties": false
14859
- }
14860
- },
14861
- "required": [
14862
- "type",
14863
- "back"
14864
- ],
14865
- "additionalProperties": false
14866
- },
14867
- {
14868
- "type": "object",
14869
- "properties": {
14870
- "type": {
14871
- "type": "string",
14872
- "const": "submit"
14873
- },
14874
- "submit": {
14875
- "type": "object",
14876
- "properties": {
14877
- "screenId": {
14878
- "type": "string"
14879
- }
14880
- },
14881
- "required": [
14882
- "screenId"
14883
- ],
14884
- "additionalProperties": false
14885
- }
14886
- },
14887
- "required": [
14888
- "type",
14889
- "submit"
14890
- ],
14891
- "additionalProperties": false
14892
- }
14893
- ]
14894
- },
14895
- "openInNewTab": {
14896
- "type": "boolean"
14897
- }
14898
- },
14899
- "required": [
14900
- "label",
14901
- "destination"
14902
- ],
14903
- "additionalProperties": false
14904
- }
14905
- },
14906
- "required": [
14907
- "id",
14908
- "type",
14909
- "button"
14910
- ],
14911
- "additionalProperties": false,
14912
- "description": "Clickable button that can navigate to external URLs, internal screens, or go back to the previous screen."
14913
- },
14914
- {
14915
- "type": "object",
14916
- "properties": {
14917
- "id": {
14918
- "type": "string"
14919
- },
14920
- "type": {
14921
- "type": "string",
14922
- "const": "divider"
14923
- },
14924
- "divider": {
14925
- "type": "object",
14926
- "properties": {
14927
- "color": {
14928
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/0/properties/text/properties/segments/items/properties/color"
14929
- },
14930
- "thickness": {
14931
- "type": "number"
14932
- }
14933
- },
14934
- "additionalProperties": false
14935
- }
14936
- },
14937
- "required": [
14938
- "id",
14939
- "type",
14940
- "divider"
14941
- ],
14942
- "additionalProperties": false
14943
- },
14944
- {
14945
- "type": "object",
14946
- "properties": {
14947
- "id": {
14948
- "type": "string"
14949
- },
14950
- "type": {
14951
- "type": "string",
14952
- "const": "starRating"
14953
- },
14954
- "starRating": {
14955
- "type": "object",
14956
- "properties": {
14957
- "align": {
14958
- "type": "string",
14959
- "enum": [
14960
- "left",
14961
- "center",
14962
- "right"
14963
- ]
14964
- }
14965
- },
14966
- "additionalProperties": false
14967
- }
14968
- },
14969
- "required": [
14970
- "id",
14971
- "type",
14972
- "starRating"
14973
- ],
14974
- "additionalProperties": false,
14975
- "description": "Displays restaurant's average rating and review count. Clickable to navigate to reviews section."
14976
- },
14977
- {
14978
- "type": "object",
14979
- "properties": {
14980
- "id": {
14981
- "type": "string"
14982
- },
14983
- "type": {
14984
- "type": "string",
14985
- "const": "punchStatus"
14986
- },
14987
- "punchStatus": {
14988
- "type": "object",
14989
- "properties": {},
14990
- "additionalProperties": false
14991
- }
14992
- },
14993
- "required": [
14994
- "id",
14995
- "type",
14996
- "punchStatus"
14997
- ],
14998
- "additionalProperties": false,
14999
- "description": "Shows punch card progress and next reward. Displays signup button if user hasn't joined yet."
15000
- },
15001
- {
15002
- "type": "object",
15003
- "properties": {
15004
- "id": {
15005
- "type": "string"
15006
- },
15007
- "type": {
15008
- "type": "string",
15009
- "const": "openTable"
15010
- },
15011
- "openTable": {
15012
- "type": "object",
15013
- "properties": {
15014
- "selectedConfigIds": {
15015
- "type": "array",
15016
- "items": {
15017
- "type": "string"
15018
- }
15019
- },
15020
- "source": {
15021
- "type": "string"
15022
- },
15023
- "campaign": {
15024
- "type": "string"
15025
- },
15026
- "experienceIds": {
15027
- "type": "array",
15028
- "items": {
15029
- "type": "number"
15030
- }
15031
- },
15032
- "bookInFunnel": {
15033
- "type": "boolean"
15034
- }
15035
- },
15036
- "additionalProperties": false
15037
- }
15038
- },
15039
- "required": [
15040
- "id",
15041
- "type",
15042
- "openTable"
15043
- ],
15044
- "additionalProperties": false,
15045
- "description": "OpenTable reservation widget that finds available time slots. When bookInFunnel is true, the reservation is completed in-funnel via SMS 2FA; otherwise it redirects to OpenTable."
15046
- },
15047
- {
15048
- "type": "object",
15049
- "properties": {
15050
- "id": {
15051
- "type": "string"
15052
- },
15053
- "type": {
15054
- "type": "string",
15055
- "const": "stripeCheckout"
15056
- },
15057
- "stripeCheckout": {
15058
- "type": "object",
15059
- "properties": {
15060
- "isOneTimePurchase": {
15061
- "type": "boolean"
15062
- },
15063
- "quantitySelection": {
15064
- "type": "object",
15065
- "properties": {
15066
- "isEnabled": {
15067
- "type": "boolean"
15068
- },
15069
- "maxQuantity": {
15070
- "type": "number"
15071
- }
15072
- },
15073
- "required": [
15074
- "isEnabled"
15075
- ],
15076
- "additionalProperties": false
15077
- }
15078
- },
15079
- "additionalProperties": false
15080
- }
15081
- },
15082
- "required": [
15083
- "id",
15084
- "type",
15085
- "stripeCheckout"
15086
- ],
15087
- "additionalProperties": false,
15088
- "description": "Embedded Stripe checkout for prepay options and bundles."
15089
- },
15090
- {
15091
- "type": "object",
15092
- "properties": {
15093
- "id": {
15094
- "type": "string"
15095
- },
15096
- "type": {
15097
- "type": "string",
15098
- "const": "cart"
15099
- },
15100
- "cart": {
15101
- "type": "object",
15102
- "properties": {
15103
- "promoIds": {
15104
- "type": "array",
15105
- "items": {
15106
- "type": "string"
15107
- }
15108
- },
15109
- "quantitySelector": {
15110
- "type": "string",
15111
- "enum": [
15112
- "stepper",
15113
- "radio"
15114
- ]
15115
- },
15116
- "minQuantity": {
15117
- "type": "integer",
15118
- "minimum": 0
15119
- },
15120
- "maxQuantity": {
15121
- "type": "integer",
15122
- "minimum": 1
15123
- },
15124
- "units": {
15125
- "type": "object",
15126
- "additionalProperties": {
15127
- "type": "string"
15128
- }
15129
- }
15130
- },
15131
- "additionalProperties": false
15132
- }
15133
- },
15134
- "required": [
15135
- "id",
15136
- "type",
15137
- "cart"
15138
- ],
15139
- "additionalProperties": false,
15140
- "description": "Cart widget with quantity selectors for promotions. Supports both one-time and recurring (subscription) checkout."
15141
- },
15142
- {
15143
- "type": "object",
15144
- "properties": {
15145
- "id": {
15146
- "type": "string"
15147
- },
15148
- "type": {
15149
- "type": "string",
15150
- "const": "passButton"
15151
- },
15152
- "passButton": {
15153
- "type": "object",
15154
- "properties": {
15155
- "disableWalletButton": {
15156
- "type": "boolean"
15157
- }
15158
- },
15159
- "additionalProperties": false
15160
- }
15161
- },
15162
- "required": [
15163
- "id",
15164
- "type",
15165
- "passButton"
15166
- ],
15167
- "additionalProperties": false,
15168
- "description": "Button to add pass to Apple Wallet or Google Wallet. Automatically detects device type."
15169
- },
15170
- {
15171
- "type": "object",
15172
- "properties": {
15173
- "id": {
15174
- "type": "string"
15175
- },
15176
- "type": {
15177
- "type": "string",
15178
- "const": "form"
15179
- },
15180
- "form": {
15181
- "type": "object",
15182
- "properties": {
15183
- "properties": {
15184
- "type": "array",
15185
- "items": {
15186
- "type": "object",
15187
- "properties": {
15188
- "propertyId": {
15189
- "type": "string"
15190
- }
15191
- },
15192
- "required": [
15193
- "propertyId"
15194
- ],
15195
- "additionalProperties": false
15196
- }
15197
- },
15198
- "submitButton": {
15199
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/3"
15200
- }
15201
- },
15202
- "required": [
15203
- "properties",
15204
- "submitButton"
15205
- ],
15206
- "additionalProperties": false
15207
- }
15208
- },
15209
- "required": [
15210
- "id",
15211
- "type",
15212
- "form"
15213
- ],
15214
- "additionalProperties": false,
15215
- "description": "Form with input fields that prevents duplicate submissions and shows previous values if already submitted. **IMPORTANT RESTRICTION**: This component can ONLY be used in screens that come AFTER the signup screen. Signups only occur on the MEMBERS_PASS screen (screenId: 'members-pass'). Do NOT use form components in any screen that appears before or is the MEMBERS_PASS screen in the funnel flow."
15216
- },
15217
- {
15218
- "type": "object",
15219
- "properties": {
15220
- "id": {
15221
- "type": "string"
15222
- },
15223
- "type": {
15224
- "type": "string",
15225
- "const": "signUpForm"
15226
- },
15227
- "signUpForm": {
15228
- "type": "object",
15229
- "properties": {
15230
- "requireSmsVerification": {
15231
- "type": "boolean"
15232
- },
15233
- "collectEmail": {
15234
- "type": "boolean"
15235
- }
15236
- },
15237
- "additionalProperties": false
15238
- }
15239
- },
15240
- "required": [
15241
- "id",
15242
- "type",
15243
- "signUpForm"
15244
- ],
15245
- "additionalProperties": false,
15246
- "description": "Sign up form widget with MemberInfoForm. Submit buttons are controlled by other renderables."
15247
- },
15248
- {
15249
- "type": "object",
15250
- "properties": {
15251
- "id": {
15252
- "type": "string"
15253
- },
15254
- "type": {
15255
- "type": "string",
15256
- "const": "card"
15257
- },
15258
- "card": {
15259
- "type": "object",
15260
- "properties": {
15261
- "content": {
15262
- "type": "array",
15263
- "items": {
15264
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0"
15265
- }
15266
- },
15267
- "variant": {
15268
- "type": "string",
15269
- "enum": [
15270
- "elevation",
15271
- "outlined"
15272
- ]
15273
- },
15274
- "elevation": {
15275
- "type": "number"
15276
- },
15277
- "sx": {
15278
- "type": "object",
15279
- "properties": {
15280
- "borderRadius": {
15281
- "type": [
15282
- "number",
15283
- "string"
15284
- ]
15285
- },
15286
- "backgroundColor": {
15287
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/0/properties/text/properties/segments/items/properties/color"
15288
- },
15289
- "borderColor": {
15290
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/0/properties/text/properties/segments/items/properties/color"
15291
- },
15292
- "width": {
15293
- "type": [
15294
- "number",
15295
- "string"
15296
- ]
15297
- },
15298
- "borderWidth": {
15299
- "type": "number"
15300
- },
15301
- "flexShrink": {
15302
- "type": "number"
15303
- }
15304
- },
15305
- "additionalProperties": false
15306
- }
15307
- },
15308
- "required": [
15309
- "content"
15310
- ],
15311
- "additionalProperties": false
15312
- }
15313
- },
15314
- "required": [
15315
- "id",
15316
- "type",
15317
- "card"
15318
- ],
15319
- "additionalProperties": false
15320
- },
15321
- {
15322
- "type": "object",
15323
- "properties": {
15324
- "id": {
15325
- "type": "string"
15326
- },
15327
- "type": {
15328
- "type": "string",
15329
- "const": "collapse"
15330
- },
15331
- "collapse": {
15332
- "type": "object",
15333
- "properties": {
15334
- "title": {
15335
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/0"
15336
- },
15337
- "content": {
15338
- "type": "array",
15339
- "items": {
15340
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0"
15341
- }
15342
- }
15343
- },
15344
- "required": [
15345
- "title",
15346
- "content"
15347
- ],
15348
- "additionalProperties": false
15349
- }
15350
- },
15351
- "required": [
15352
- "id",
15353
- "type",
15354
- "collapse"
15355
- ],
15356
- "additionalProperties": false,
15357
- "description": "Expandable/collapsible section. Click title to toggle content visibility."
15358
- },
15359
- {
15360
- "type": "object",
15361
- "properties": {
15362
- "id": {
15363
- "type": "string"
15364
- },
15365
- "type": {
15366
- "type": "string",
15367
- "const": "stack"
15368
- },
15369
- "stack": {
15370
- "type": "object",
15371
- "properties": {
15372
- "direction": {
15373
- "type": "string",
15374
- "enum": [
15375
- "row",
15376
- "column"
15377
- ]
15378
- },
15379
- "spacing": {
15380
- "type": "number"
15381
- },
15382
- "justifyContent": {
15383
- "type": "string",
15384
- "enum": [
15385
- "flex-start",
15386
- "center",
15387
- "flex-end",
15388
- "space-between",
15389
- "space-around",
15390
- "space-evenly"
15391
- ]
15392
- },
15393
- "content": {
15394
- "type": "array",
15395
- "items": {
15396
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0"
15397
- }
15398
- },
15399
- "overflowX": {
15400
- "type": "string",
15401
- "enum": [
15402
- "visible",
15403
- "hidden",
15404
- "scroll",
15405
- "auto"
15406
- ]
15407
- },
15408
- "backgroundColor": {
15409
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/0/properties/text/properties/segments/items/properties/color"
15410
- },
15411
- "padding": {
15412
- "type": "number"
15413
- },
15414
- "fullBleed": {
15415
- "type": "boolean"
15416
- }
15417
- },
15418
- "required": [
15419
- "content"
15420
- ],
15421
- "additionalProperties": false
15422
- }
15423
- },
15424
- "required": [
15425
- "id",
15426
- "type",
15427
- "stack"
15428
- ],
15429
- "additionalProperties": false
15430
- },
15431
- {
15432
- "type": "object",
15433
- "properties": {
15434
- "id": {
15435
- "type": "string"
15436
- },
15437
- "type": {
15438
- "type": "string",
15439
- "const": "footer"
15440
- },
15441
- "footer": {
15442
- "type": "object",
15443
- "properties": {
15444
- "content": {
15445
- "type": "array",
15446
- "items": {
15447
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0"
15448
- }
15449
- }
15450
- },
15451
- "required": [
15452
- "content"
15453
- ],
15454
- "additionalProperties": false
15455
- }
15456
- },
15457
- "required": [
15458
- "id",
15459
- "type",
15460
- "footer"
15461
- ],
15462
- "additionalProperties": false
15463
- },
15464
- {
15465
- "type": "object",
15466
- "properties": {
15467
- "id": {
15468
- "type": "string"
15469
- },
15470
- "type": {
15471
- "type": "string",
15472
- "const": "list"
15473
- },
15474
- "list": {
15475
- "type": "object",
15476
- "properties": {
15477
- "items": {
15478
- "type": "array",
15479
- "items": {
15480
- "type": "object",
15481
- "properties": {
15482
- "id": {
15483
- "type": "string"
15484
- },
15485
- "type": {
15486
- "type": "string",
15487
- "const": "listItem"
15488
- },
15489
- "listItem": {
15490
- "type": "object",
15491
- "properties": {
15492
- "enumerator": {
15493
- "anyOf": [
15494
- {
15495
- "type": "object",
15496
- "properties": {
15497
- "type": {
15498
- "type": "string",
15499
- "const": "bullet"
15500
- }
15501
- },
15502
- "required": [
15503
- "type"
15504
- ],
15505
- "additionalProperties": false
15506
- },
15507
- {
15508
- "type": "object",
15509
- "properties": {
15510
- "type": {
15511
- "type": "string",
15512
- "const": "number"
15513
- }
15514
- },
15515
- "required": [
15516
- "type"
15517
- ],
15518
- "additionalProperties": false
15519
- },
15520
- {
15521
- "type": "object",
15522
- "properties": {
15523
- "type": {
15524
- "type": "string",
15525
- "const": "none"
15526
- }
15527
- },
15528
- "required": [
15529
- "type"
15530
- ],
15531
- "additionalProperties": false
15532
- },
15533
- {
15534
- "type": "object",
15535
- "properties": {
15536
- "type": {
15537
- "type": "string",
15538
- "const": "icon"
15539
- },
15540
- "icon": {
15541
- "type": "string"
15542
- }
15543
- },
15544
- "required": [
15545
- "type",
15546
- "icon"
15547
- ],
15548
- "additionalProperties": false
15549
- }
15550
- ]
15551
- },
15552
- "item": {
15553
- "anyOf": [
15554
- {
15555
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/0"
15556
- },
15557
- {
15558
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/1"
15559
- },
15560
- {
15561
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/2"
15562
- },
15563
- {
15564
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/3"
15565
- },
15566
- {
15567
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/4"
15568
- },
15569
- {
15570
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/5"
15571
- },
15572
- {
15573
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/6"
15574
- },
15575
- {
15576
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/8"
15577
- },
15578
- {
15579
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/9"
15580
- },
15581
- {
15582
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/7"
15583
- },
15584
- {
15585
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/10"
15586
- },
15587
- {
15588
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/11"
15589
- },
15590
- {
15591
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/12"
15592
- },
15593
- {
15594
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/13"
15595
- },
15596
- {
15597
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/14"
15598
- },
15599
- {
15600
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/15"
15601
- },
15602
- {
15603
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/16"
15604
- },
15605
- {
15606
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17"
15607
- },
15608
- {
15609
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items"
15610
- },
15611
- {
15612
- "type": "object",
15613
- "properties": {
15614
- "id": {
15615
- "type": "string"
15616
- },
15617
- "type": {
15618
- "type": "string",
15619
- "const": "tabs"
15620
- },
15621
- "tabs": {
15622
- "type": "object",
15623
- "properties": {
15624
- "content": {
15625
- "type": "array",
15626
- "items": {
15627
- "type": "object",
15628
- "properties": {
15629
- "id": {
15630
- "type": "string"
15631
- },
15632
- "type": {
15633
- "type": "string",
15634
- "const": "tab"
15635
- },
15636
- "tab": {
15637
- "type": "object",
15638
- "properties": {
15639
- "label": {
15640
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/0"
15641
- },
15642
- "content": {
15643
- "type": "array",
15644
- "items": {
15645
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0"
15646
- }
15647
- }
15648
- },
15649
- "required": [
15650
- "label",
15651
- "content"
15652
- ],
15653
- "additionalProperties": false
15654
- }
15655
- },
15656
- "required": [
15657
- "id",
15658
- "type",
15659
- "tab"
15660
- ],
15661
- "additionalProperties": false
15662
- }
15663
- }
15664
- },
15665
- "required": [
15666
- "content"
15667
- ],
15668
- "additionalProperties": false
15669
- }
15670
- },
15671
- "required": [
15672
- "id",
15673
- "type",
15674
- "tabs"
15675
- ],
15676
- "additionalProperties": false,
15677
- "description": "Tabbed interface where users switch between content sections. Only one tab visible at a time."
15678
- },
15679
- {
15680
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/19/properties/tabs/properties/content/items"
15681
- },
15682
- {
15683
- "type": "object",
15684
- "properties": {
15685
- "id": {
15686
- "type": "string"
15687
- },
15688
- "type": {
15689
- "type": "string",
15690
- "const": "reviews"
15691
- },
15692
- "reviews": {
15693
- "type": "object",
15694
- "properties": {
15695
- "minimumRating": {
15696
- "type": "number",
15697
- "minimum": 1,
15698
- "maximum": 5
15699
- }
15700
- },
15701
- "additionalProperties": false
15702
- }
15703
- },
15704
- "required": [
15705
- "id",
15706
- "type",
15707
- "reviews"
15708
- ],
15709
- "additionalProperties": false,
15710
- "description": "Displays restaurant reviews from Google Reviews."
15711
- },
15712
- {
15713
- "type": "object",
15714
- "properties": {
15715
- "id": {
15716
- "type": "string"
15717
- },
15718
- "type": {
15719
- "type": "string",
15720
- "const": "menu"
15721
- },
15722
- "menu": {
15723
- "type": "object",
15724
- "properties": {},
15725
- "additionalProperties": false
15726
- }
15727
- },
15728
- "required": [
15729
- "id",
15730
- "type",
15731
- "menu"
15732
- ],
15733
- "additionalProperties": false,
15734
- "description": "Displays restaurant menu items organized by categories."
15735
- },
15736
- {
15737
- "type": "object",
15738
- "properties": {
15739
- "id": {
15740
- "type": "string"
15741
- },
15742
- "type": {
15743
- "type": "string",
15744
- "const": "photos"
15745
- },
15746
- "photos": {
15747
- "type": "object",
15748
- "properties": {},
15749
- "additionalProperties": false
15750
- }
15751
- },
15752
- "required": [
15753
- "id",
15754
- "type",
15755
- "photos"
15756
- ],
15757
- "additionalProperties": false,
15758
- "description": "Displays photo gallery from restaurant's Google Business profile."
15759
- },
15760
- {
15761
- "type": "object",
15762
- "properties": {
15763
- "id": {
15764
- "type": "string"
15765
- },
15766
- "type": {
15767
- "type": "string",
15768
- "const": "locationInfo"
15769
- },
15770
- "locationInfo": {
15771
- "type": "object",
15772
- "properties": {
15773
- "name": {
15774
- "type": "string"
15775
- },
15776
- "address": {
15777
- "type": "string"
15778
- },
15779
- "phone": {
15780
- "type": "string"
15781
- },
15782
- "website": {
15783
- "type": "string"
15784
- }
15785
- },
15786
- "additionalProperties": false
15787
- }
15788
- },
15789
- "required": [
15790
- "id",
15791
- "type",
15792
- "locationInfo"
15793
- ],
15794
- "additionalProperties": false,
15795
- "description": "Displays restaurant location info with clickable phone and website links."
15796
- },
15797
- {
15798
- "type": "object",
15799
- "properties": {
15800
- "id": {
15801
- "type": "string"
15802
- },
15803
- "type": {
15804
- "type": "string",
15805
- "const": "hours"
15806
- },
15807
- "hours": {
15808
- "type": "object",
15809
- "properties": {
15810
- "operatingHours": {
15811
- "type": "object",
15812
- "properties": {
15813
- "Mon": {
15814
- "type": "array",
15815
- "items": {
15816
- "type": "object",
15817
- "properties": {
15818
- "startLocalHour": {
15819
- "type": "number"
15820
- },
15821
- "startLocalMinute": {
15822
- "type": "number"
15823
- },
15824
- "endLocalHour": {
15825
- "type": "number"
15826
- },
15827
- "endLocalMinute": {
15828
- "type": "number"
15829
- }
15830
- },
15831
- "required": [
15832
- "startLocalHour",
15833
- "startLocalMinute",
15834
- "endLocalHour",
15835
- "endLocalMinute"
15836
- ],
15837
- "additionalProperties": false
15838
- }
15839
- },
15840
- "Tue": {
15841
- "type": "array",
15842
- "items": {
15843
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/25/properties/hours/properties/operatingHours/properties/Mon/items"
15844
- }
15845
- },
15846
- "Wed": {
15847
- "type": "array",
15848
- "items": {
15849
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/25/properties/hours/properties/operatingHours/properties/Mon/items"
15850
- }
15851
- },
15852
- "Thu": {
15853
- "type": "array",
15854
- "items": {
15855
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/25/properties/hours/properties/operatingHours/properties/Mon/items"
15856
- }
15857
- },
15858
- "Fri": {
15859
- "type": "array",
15860
- "items": {
15861
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/25/properties/hours/properties/operatingHours/properties/Mon/items"
15862
- }
15863
- },
15864
- "Sat": {
15865
- "type": "array",
15866
- "items": {
15867
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/25/properties/hours/properties/operatingHours/properties/Mon/items"
15868
- }
15869
- },
15870
- "Sun": {
15871
- "type": "array",
15872
- "items": {
15873
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/25/properties/hours/properties/operatingHours/properties/Mon/items"
15874
- }
15875
- }
15876
- },
15877
- "required": [
15878
- "Mon",
15879
- "Tue",
15880
- "Wed",
15881
- "Thu",
15882
- "Fri",
15883
- "Sat",
15884
- "Sun"
15885
- ],
15886
- "additionalProperties": false
15887
- }
15888
- },
15889
- "required": [
15890
- "operatingHours"
15891
- ],
15892
- "additionalProperties": false
15893
- }
15894
- },
15895
- "required": [
15896
- "id",
15897
- "type",
15898
- "hours"
15899
- ],
15900
- "additionalProperties": false
15901
- },
15902
- {
15903
- "type": "object",
15904
- "properties": {
15905
- "id": {
15906
- "type": "string"
15907
- },
15908
- "type": {
15909
- "type": "string",
15910
- "const": "video"
15911
- },
15912
- "video": {
15913
- "type": "object",
15914
- "properties": {
15915
- "src": {
15916
- "type": "string"
15917
- },
15918
- "poster": {
15919
- "type": "string"
15920
- },
15921
- "autoplay": {
15922
- "type": "boolean"
15923
- },
15924
- "loop": {
15925
- "type": "boolean"
15926
- },
15927
- "muted": {
15928
- "type": "boolean"
15929
- },
15930
- "controls": {
15931
- "type": "boolean"
15932
- },
15933
- "maxHeight": {
15934
- "type": "number"
15935
- },
15936
- "maxWidth": {
15937
- "type": "number"
15938
- },
15939
- "objectFit": {
15940
- "type": "string",
15941
- "enum": [
15942
- "contain",
15943
- "cover",
15944
- "fill",
15945
- "none",
15946
- "scale-down"
15947
- ]
15948
- },
15949
- "borderRadius": {
15950
- "type": "number"
15951
- }
15952
- },
15953
- "required": [
15954
- "src"
15955
- ],
15956
- "additionalProperties": false
15957
- }
15958
- },
15959
- "required": [
15960
- "id",
15961
- "type",
15962
- "video"
15963
- ],
15964
- "additionalProperties": false,
15965
- "description": "Displays a video from an S3 URL. Supports autoplay, loop, muted, and controls options."
15966
- }
15967
- ]
15968
- }
15969
- },
15970
- "required": [
15971
- "enumerator",
15972
- "item"
15973
- ],
15974
- "additionalProperties": false
15975
- }
15976
- },
15977
- "required": [
15978
- "id",
15979
- "type",
15980
- "listItem"
15981
- ],
15982
- "additionalProperties": false
15983
- }
15984
- }
15985
- },
15986
- "required": [
15987
- "items"
15988
- ],
15989
- "additionalProperties": false
15990
- }
15991
- },
15992
- "required": [
15993
- "id",
15994
- "type",
15995
- "list"
15996
- ],
15997
- "additionalProperties": false
15998
- },
15999
- {
16000
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/19"
16001
- },
16002
- {
16003
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/19/properties/tabs/properties/content/items"
16004
- },
16005
- {
16006
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/21"
16007
- },
16008
- {
16009
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/22"
16010
- },
16011
- {
16012
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/23"
16013
- },
16014
- {
16015
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/24"
16016
- },
16017
- {
16018
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/25"
16019
- },
16020
- {
16021
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item/anyOf/26"
16022
- }
16023
- ],
16024
- "description": "Renderable widget schemas. Each renderable has an 'id' field that must be a UUID. When creating new renderables, generate new UUIDs. When editing existing renderables, preserve their existing IDs."
16025
- },
16026
- {
16027
- "type": "object",
16028
- "properties": {
16029
- "rootConfig": {
16030
- "type": "object",
16031
- "properties": {
16032
- "paddingTop": {
16033
- "type": "number"
16034
- },
16035
- "paddingBottom": {
16036
- "type": "number"
16037
- },
16038
- "paddingX": {
16039
- "type": "number"
16040
- },
16041
- "background": {
16042
- "anyOf": [
16043
- {
16044
- "type": "object",
16045
- "properties": {
16046
- "type": {
16047
- "type": "string",
16048
- "const": "color"
16049
- },
16050
- "color": {
16051
- "type": "object",
16052
- "properties": {
16053
- "color": {
16054
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/0/properties/text/properties/segments/items/properties/color"
16055
- }
16056
- },
16057
- "required": [
16058
- "color"
16059
- ],
16060
- "additionalProperties": false
16061
- }
16062
- },
16063
- "required": [
16064
- "type",
16065
- "color"
16066
- ],
16067
- "additionalProperties": false
16068
- },
16069
- {
16070
- "type": "object",
16071
- "properties": {
16072
- "type": {
16073
- "type": "string",
16074
- "const": "image"
16075
- },
16076
- "image": {
16077
- "type": "object",
16078
- "properties": {
16079
- "src": {
16080
- "type": "string"
16081
- }
16082
- },
16083
- "required": [
16084
- "src"
16085
- ],
16086
- "additionalProperties": false
16087
- }
16088
- },
16089
- "required": [
16090
- "type",
16091
- "image"
16092
- ],
16093
- "additionalProperties": false
16094
- }
16095
- ]
16096
- }
16097
- },
16098
- "additionalProperties": false
16099
- }
16100
- }
16101
- }
16102
- ]
16103
- },
16104
- {
16105
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item"
16106
- }
16107
- ]
16108
- },
16109
- "targetId": {
16110
- "type": "string"
16111
- },
16112
- "position": {
16113
- "type": "string",
16114
- "enum": [
16115
- "before",
16116
- "after",
16117
- "inside"
16118
- ]
16119
- }
16120
- },
16121
- "required": [
16122
- "type",
16123
- "renderable"
16124
- ],
16125
- "additionalProperties": false
14506
+ }
14507
+ },
14508
+ "required": [
14509
+ "type",
14510
+ "filter"
14511
+ ],
14512
+ "additionalProperties": false,
14513
+ "description": 'Restrict the set to matching rows. Example: {"type":"filter","filter":{"$eventType":{"strings":["order","rewardAwarded"]}}}'
14514
+ },
14515
+ {
14516
+ "type": "object",
14517
+ "properties": {
14518
+ "type": {
14519
+ "type": "string",
14520
+ "const": "pivot"
16126
14521
  },
16127
- {
16128
- "type": "object",
16129
- "properties": {
16130
- "type": {
16131
- "type": "string",
16132
- "const": "update"
16133
- },
16134
- "id": {
16135
- "type": "string"
16136
- },
16137
- "renderable": {
16138
- "anyOf": [
16139
- {
16140
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0"
16141
- },
16142
- {
16143
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/renderable/anyOf/0/allOf/0/anyOf/17/properties/list/properties/items/items/properties/listItem/properties/item"
16144
- }
16145
- ]
16146
- }
16147
- },
16148
- "required": [
16149
- "type",
16150
- "id",
16151
- "renderable"
16152
- ],
16153
- "additionalProperties": false
14522
+ "name": {
14523
+ "type": "string",
14524
+ "description": "A link name from describeData's links for the current object type. Replaces the set with that linked object type, so later commands apply to the new type."
14525
+ }
14526
+ },
14527
+ "required": [
14528
+ "type",
14529
+ "name"
14530
+ ],
14531
+ "additionalProperties": false,
14532
+ "description": 'Traverse a link. Example: {"type":"pivot","name":"orderItem"} on interface.order gives its line items.'
14533
+ },
14534
+ {
14535
+ "type": "object",
14536
+ "properties": {
14537
+ "type": {
14538
+ "type": "string",
14539
+ "const": "aggregate"
16154
14540
  },
16155
- {
16156
- "type": "object",
16157
- "properties": {
16158
- "type": {
16159
- "type": "string",
16160
- "const": "delete"
16161
- },
16162
- "id": {
16163
- "type": "string"
16164
- }
16165
- },
16166
- "required": [
16167
- "type",
16168
- "id"
16169
- ],
16170
- "additionalProperties": false
14541
+ "aggregate": {
14542
+ "description": 'Required. Group and aggregate, replacing the row shape with the grouped and aggregated columns only. Shape: {"aggregate":{"$<column>":"SUM"|"MAX"|"MIN"|"AVG"|"COUNT"},"groupBy":{"$<column>":"EXACT"}}. Example - revenue by location: {"aggregate":{"$amount":"SUM"},"groupBy":{"$locationId":"EXACT"}}'
14543
+ }
14544
+ },
14545
+ "required": [
14546
+ "type",
14547
+ "aggregate"
14548
+ ],
14549
+ "additionalProperties": false,
14550
+ "description": 'Group and aggregate. Example: {"type":"aggregate","aggregate":{"aggregate":{"$amount":"SUM"},"groupBy":{"$locationId":"EXACT"}}}'
14551
+ },
14552
+ {
14553
+ "type": "object",
14554
+ "properties": {
14555
+ "type": {
14556
+ "type": "string",
14557
+ "const": "join"
16171
14558
  },
16172
- {
16173
- "type": "object",
16174
- "properties": {
16175
- "type": {
16176
- "type": "string",
16177
- "const": "move"
16178
- },
16179
- "id": {
16180
- "type": "string"
16181
- },
16182
- "targetId": {
16183
- "type": "string"
16184
- },
16185
- "position": {
16186
- "$ref": "#/properties/edits/items/properties/edit/anyOf/0/properties/position"
16187
- }
14559
+ "name": {
14560
+ "type": "string",
14561
+ "description": "A link name from describeData for the current object type."
14562
+ },
14563
+ "fields": {
14564
+ "type": "array",
14565
+ "items": {
14566
+ "type": "string"
16188
14567
  },
16189
- "required": [
16190
- "type",
16191
- "id",
16192
- "targetId",
16193
- "position"
16194
- ],
16195
- "additionalProperties": false
14568
+ "description": "Columns to pull from the linked object type."
16196
14569
  }
16197
- ]
14570
+ },
14571
+ "required": [
14572
+ "type",
14573
+ "name",
14574
+ "fields"
14575
+ ],
14576
+ "additionalProperties": false,
14577
+ "description": 'Widen each row with columns from a linked object, keeping the current object type. Example: {"type":"join","name":"order","fields":["closedAt","amount"]}'
16198
14578
  }
14579
+ ]
14580
+ },
14581
+ "description": "Ordered list of commands, each narrowing or reshaping the set before the fetch. Omit to fetch the object type unfiltered. pivot and join must come before any aggregate."
14582
+ },
14583
+ "args": {
14584
+ "type": "object",
14585
+ "properties": {
14586
+ "limit": {
14587
+ "type": "integer",
14588
+ "exclusiveMinimum": 0,
14589
+ "maximum": 1e3,
14590
+ "description": "Rows to return. Defaults to 100, maximum 1000."
16199
14591
  },
16200
- "required": [
16201
- "screenId",
16202
- "edit"
16203
- ],
16204
- "additionalProperties": false
16205
- }
14592
+ "cursor": {
14593
+ "type": "integer",
14594
+ "minimum": 0,
14595
+ "description": "Row offset. Pass the nextCursor from the previous response to page; a missing nextCursor means there are no more rows."
14596
+ },
14597
+ "order": {
14598
+ "type": "object",
14599
+ "properties": {
14600
+ "field": {
14601
+ "type": "string"
14602
+ },
14603
+ "direction": {
14604
+ "type": "string",
14605
+ "enum": [
14606
+ "ASC",
14607
+ "DESC"
14608
+ ]
14609
+ }
14610
+ },
14611
+ "required": [
14612
+ "field",
14613
+ "direction"
14614
+ ],
14615
+ "additionalProperties": false,
14616
+ "description": 'Sort order. Example: {"field":"eventTime","direction":"DESC"}'
14617
+ },
14618
+ "fields": {
14619
+ "type": "array",
14620
+ "items": {
14621
+ "type": "string"
14622
+ },
14623
+ "description": "Columns to return. Omit for all of them. The main lever for keeping responses under the payload cap on wide object types."
14624
+ }
14625
+ },
14626
+ "additionalProperties": false
14627
+ }
14628
+ },
14629
+ "required": [
14630
+ "schemaName",
14631
+ "objectTypeName"
14632
+ ],
14633
+ "additionalProperties": false,
14634
+ "$schema": "http://json-schema.org/draft-07/schema#"
14635
+ }
14636
+ },
14637
+ {
14638
+ "id": "saveAutomationEdits",
14639
+ "domain": "automations",
14640
+ "description": "Promote an automation draft to production \u2014 this writes to live automations and real guests start receiving the result. Refuses if any touched automation changed since the draft was staged, in which case re-stage against the current state. Marks the draft promoted on success.",
14641
+ "type": "mutation",
14642
+ "path": [
14643
+ "api",
14644
+ "automation",
14645
+ "saveEdits"
14646
+ ],
14647
+ "inputJsonSchema": {
14648
+ "type": "object",
14649
+ "properties": {
14650
+ "draftId": {
14651
+ "type": "string"
14652
+ }
14653
+ },
14654
+ "required": [
14655
+ "draftId"
14656
+ ],
14657
+ "additionalProperties": false,
14658
+ "$schema": "http://json-schema.org/draft-07/schema#"
14659
+ }
14660
+ },
14661
+ {
14662
+ "id": "saveFunnelEdits",
14663
+ "domain": "funnel",
14664
+ "description": "Promote a funnel draft to production: applies the draft's staged edits, creates any screens staged with stageFunnelScreen, then marks the draft promoted. This writes to the live funnel.",
14665
+ "type": "mutation",
14666
+ "path": [
14667
+ "api",
14668
+ "layoutEngine",
14669
+ "screens",
14670
+ "saveEdits"
14671
+ ],
14672
+ "inputJsonSchema": {
14673
+ "type": "object",
14674
+ "properties": {
14675
+ "draftId": {
14676
+ "type": "string"
16206
14677
  }
16207
14678
  },
14679
+ "required": [
14680
+ "draftId"
14681
+ ],
16208
14682
  "additionalProperties": false,
16209
14683
  "$schema": "http://json-schema.org/draft-07/schema#"
16210
14684
  }
@@ -23438,6 +21912,45 @@ Example - opted-in members with more than 5 visits, newest first:
23438
21912
  "$schema": "http://json-schema.org/draft-07/schema#"
23439
21913
  }
23440
21914
  },
21915
+ {
21916
+ "id": "updateMembersProgramReward",
21917
+ "domain": "membersProgram",
21918
+ "description": "Correct a members program reward in place, instead of creating a second one. pointsCost replaces the current value; pass null to clear it, which converts a reward guests redeem with points into one an automation grants. Omitting a field leaves it alone. staffInstructions is stored on the reward's catalog item and is rejected for a POS-sourced item, where the column does not exist. Find the rewardId with listMembersProgramRewards.",
21919
+ "type": "mutation",
21920
+ "path": [
21921
+ "api",
21922
+ "membersProgram",
21923
+ "updateReward"
21924
+ ],
21925
+ "inputJsonSchema": {
21926
+ "type": "object",
21927
+ "properties": {
21928
+ "rewardId": {
21929
+ "type": "string",
21930
+ "minLength": 1
21931
+ },
21932
+ "pointsCost": {
21933
+ "anyOf": [
21934
+ {
21935
+ "type": "integer",
21936
+ "minimum": 0
21937
+ },
21938
+ {
21939
+ "type": "null"
21940
+ }
21941
+ ]
21942
+ },
21943
+ "staffInstructions": {
21944
+ "type": "string"
21945
+ }
21946
+ },
21947
+ "required": [
21948
+ "rewardId"
21949
+ ],
21950
+ "additionalProperties": false,
21951
+ "$schema": "http://json-schema.org/draft-07/schema#"
21952
+ }
21953
+ },
23441
21954
  {
23442
21955
  "id": "updateOnboardingForm",
23443
21956
  "domain": "core",