late-sdk 0.0.672 → 0.0.674

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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -1
  3. data/docs/ApiKey.md +3 -1
  4. data/docs/ConnectedAppsApi.md +2 -2
  5. data/docs/CreateApiKeyRequest.md +3 -1
  6. data/docs/InlineObject2.md +5 -11
  7. data/docs/InlineObject3.md +28 -0
  8. data/docs/{InlineObject2Details.md → InlineObject3Details.md} +2 -2
  9. data/docs/InvitesApi.md +1 -1
  10. data/docs/PlatformTarget.md +2 -0
  11. data/docs/WebhooksApi.md +3 -3
  12. data/lib/zernio-sdk/api/connected_apps_api.rb +4 -4
  13. data/lib/zernio-sdk/api/invites_api.rb +2 -2
  14. data/lib/zernio-sdk/api/webhooks_api.rb +6 -6
  15. data/lib/zernio-sdk/models/api_key.rb +16 -4
  16. data/lib/zernio-sdk/models/create_api_key_request.rb +16 -4
  17. data/lib/zernio-sdk/models/inline_object2.rb +18 -80
  18. data/lib/zernio-sdk/models/inline_object3.rb +274 -0
  19. data/lib/zernio-sdk/models/{inline_object2_details.rb → inline_object3_details.rb} +3 -3
  20. data/lib/zernio-sdk/models/platform_target.rb +12 -1
  21. data/lib/zernio-sdk/version.rb +1 -1
  22. data/lib/zernio-sdk.rb +2 -1
  23. data/openapi.yaml +650 -27
  24. data/spec/api/connected_apps_api_spec.rb +2 -2
  25. data/spec/api/invites_api_spec.rb +1 -1
  26. data/spec/api/webhooks_api_spec.rb +3 -3
  27. data/spec/models/api_key_spec.rb +10 -0
  28. data/spec/models/create_api_key_request_spec.rb +10 -0
  29. data/spec/models/inline_object2_spec.rb +4 -22
  30. data/spec/models/{inline_object2_details_spec.rb → inline_object3_details_spec.rb} +6 -6
  31. data/spec/models/inline_object3_spec.rb +74 -0
  32. data/spec/models/platform_target_spec.rb +6 -0
  33. data/zernio-sdk-0.0.674.gem +0 -0
  34. metadata +10 -6
  35. data/zernio-sdk-0.0.672.gem +0 -0
data/openapi.yaml CHANGED
@@ -543,6 +543,36 @@ components:
543
543
  error:
544
544
  type: string
545
545
  example: Not found
546
+ ResourceGroupForbidden:
547
+ description: >-
548
+ The API key is a restricted key (zrk_ prefix) and may not perform this
549
+ operation. Three cases. (1) The operation's resource group (see the
550
+ operation's x-resource-group) is disabled on the key: fix it by
551
+ creating a key with the group enabled in the dashboard API keys tab
552
+ and revoking the old one. (2) The operation is admin-plane
553
+ (x-resource-group admin-plane: API keys, invites, connected apps,
554
+ member identity), which is never grantable to restricted keys; the
555
+ error reads "Restricted API keys cannot manage API keys, invites, or
556
+ member identity." and the fix is a full-access key or the dashboard,
557
+ never a new restricted key. (3) On webhook subscription writes and
558
+ delivery-log reads, a named event maps to a resource group the key
559
+ does not hold (a no-messages key cannot subscribe to or replay
560
+ message.* events).
561
+ content:
562
+ application/json:
563
+ schema:
564
+ type: object
565
+ properties:
566
+ error:
567
+ type: string
568
+ example: "This API key has the 'messages' resource group disabled. GET /api/v1/inbox/conversations requires it. Create a key with 'messages' enabled in the dashboard API keys tab."
569
+ code:
570
+ type: string
571
+ enum: [insufficient_permissions, unclassified_resource]
572
+ required_group:
573
+ type: string
574
+ description: 'The resource group the key needs for this operation. Absent on admin-plane and unclassified-path denials.'
575
+ enum: [publishing, engagement, messages, contacts, analytics, ads, telephony, accounts, billing, webhooks]
546
576
  RateLimited:
547
577
  description: |
548
578
  The connected account's upstream platform quota is exhausted.
@@ -4272,6 +4302,17 @@ components:
4272
4302
  type: string
4273
4303
  format: date-time
4274
4304
  description: Timestamp when the post was published to this platform
4305
+ removedFromPlatformAt:
4306
+ type: [string, "null"]
4307
+ format: date-time
4308
+ description: >-
4309
+ Set when a post that was successfully published later disappears
4310
+ from the platform (deleted on-platform or taken down by the
4311
+ platform). status stays "published" (it reflects the publish
4312
+ outcome); poll this field to detect post-publish removals. Absent
4313
+ while the post is live, and cleared if the post reappears.
4314
+ Detection runs with the analytics sync, so expect up to a few
4315
+ hours of lag.
4275
4316
  isTrialReel:
4276
4317
  type: boolean
4277
4318
  description: >-
@@ -5781,6 +5822,19 @@ components:
5781
5822
  enum: [read-write, read]
5782
5823
  description: "'read-write' allows all operations, 'read' restricts to GET requests only"
5783
5824
  default: read-write
5825
+ disabledResourceGroups:
5826
+ type: array
5827
+ items:
5828
+ type: string
5829
+ enum: [publishing, engagement, messages, contacts, analytics, ads, telephony, accounts, billing, webhooks]
5830
+ description: >-
5831
+ Resource groups this key can NOT access (opt-out denylist). Absent
5832
+ or empty means legacy full access. A key with any group disabled is
5833
+ a restricted key (zrk_ prefix) and can never manage API keys,
5834
+ invites, or member identity. Each operation's group is published as
5835
+ x-resource-group. With 'messages' disabled, the KEY cannot access
5836
+ private messages; the ACCOUNT's pre-existing webhook subscriptions
5837
+ are a separate grant surface.
5784
5838
  ConnectedApp:
5785
5839
  type: object
5786
5840
  description: |
@@ -8708,6 +8762,7 @@ paths:
8708
8762
  # ============================================
8709
8763
  /v1/tools/validate/post-length:
8710
8764
  post:
8765
+ x-resource-group: "publishing"
8711
8766
  operationId: validatePostLength
8712
8767
  tags: [Validate]
8713
8768
  summary: Validate character count
@@ -8758,6 +8813,7 @@ paths:
8758
8813
 
8759
8814
  /v1/tools/validate/post:
8760
8815
  post:
8816
+ x-resource-group: "publishing"
8761
8817
  operationId: validatePost
8762
8818
  tags: [Validate]
8763
8819
  summary: Validate post content
@@ -8845,6 +8901,7 @@ paths:
8845
8901
 
8846
8902
  /v1/tools/validate/media:
8847
8903
  post:
8904
+ x-resource-group: "publishing"
8848
8905
  operationId: validateMedia
8849
8906
  tags: [Validate]
8850
8907
  summary: Validate media URL
@@ -8901,6 +8958,7 @@ paths:
8901
8958
 
8902
8959
  /v1/tools/validate/subreddit:
8903
8960
  get:
8961
+ x-resource-group: "publishing"
8904
8962
  operationId: validateSubreddit
8905
8963
  tags: [Validate]
8906
8964
  summary: Check subreddit existence
@@ -8957,6 +9015,7 @@ paths:
8957
9015
  # ============================================
8958
9016
  /v1/analytics:
8959
9017
  get:
9018
+ x-resource-group: "analytics"
8960
9019
  operationId: getAnalytics
8961
9020
  tags: [Analytics]
8962
9021
  summary: Get post analytics
@@ -9191,6 +9250,7 @@ paths:
9191
9250
 
9192
9251
  /v1/analytics/youtube/channel-insights:
9193
9252
  get:
9253
+ x-resource-group: "analytics"
9194
9254
  operationId: getYouTubeChannelInsights
9195
9255
  tags: [Analytics]
9196
9256
  summary: Get YouTube channel insights
@@ -9274,6 +9334,7 @@ paths:
9274
9334
 
9275
9335
  /v1/analytics/linkedin/org-aggregate-analytics:
9276
9336
  get:
9337
+ x-resource-group: "analytics"
9277
9338
  operationId: getLinkedInOrgAggregateAnalytics
9278
9339
  tags: [Analytics]
9279
9340
  summary: Get LinkedIn org analytics
@@ -9379,6 +9440,7 @@ paths:
9379
9440
 
9380
9441
  /v1/analytics/tiktok/account-insights:
9381
9442
  get:
9443
+ x-resource-group: "analytics"
9382
9444
  operationId: getTikTokAccountInsights
9383
9445
  tags: [Analytics]
9384
9446
  summary: Get TikTok account-level insights
@@ -9461,6 +9523,7 @@ paths:
9461
9523
 
9462
9524
  /v1/analytics/youtube/daily-views:
9463
9525
  get:
9526
+ x-resource-group: "analytics"
9464
9527
  operationId: getYouTubeDailyViews
9465
9528
  tags: [Analytics]
9466
9529
  summary: Get YouTube daily views
@@ -9597,6 +9660,7 @@ paths:
9597
9660
 
9598
9661
  /v1/analytics/youtube/video-retention:
9599
9662
  get:
9663
+ x-resource-group: "analytics"
9600
9664
  operationId: getYouTubeVideoRetention
9601
9665
  tags: [Analytics]
9602
9666
  summary: Get YouTube video retention curve
@@ -9737,6 +9801,7 @@ paths:
9737
9801
 
9738
9802
  /v1/analytics/facebook/page-insights:
9739
9803
  get:
9804
+ x-resource-group: "analytics"
9740
9805
  operationId: getFacebookPageInsights
9741
9806
  tags: [Analytics]
9742
9807
  summary: Get Facebook Page insights
@@ -9909,6 +9974,7 @@ paths:
9909
9974
 
9910
9975
  /v1/analytics/facebook/post-earnings:
9911
9976
  get:
9977
+ x-resource-group: "analytics"
9912
9978
  operationId: getFacebookPostEarnings
9913
9979
  tags: [Analytics]
9914
9980
  summary: Get Facebook post monetization earnings
@@ -10014,6 +10080,7 @@ paths:
10014
10080
 
10015
10081
  /v1/analytics/instagram/account-insights:
10016
10082
  get:
10083
+ x-resource-group: "analytics"
10017
10084
  operationId: getInstagramAccountInsights
10018
10085
  tags: [Analytics]
10019
10086
  summary: Get Instagram insights
@@ -10161,6 +10228,7 @@ paths:
10161
10228
 
10162
10229
  /v1/analytics/instagram/follower-history:
10163
10230
  get:
10231
+ x-resource-group: "analytics"
10164
10232
  operationId: getInstagramFollowerHistory
10165
10233
  tags: [Analytics]
10166
10234
  summary: Get Instagram follower history
@@ -10220,6 +10288,7 @@ paths:
10220
10288
 
10221
10289
  /v1/analytics/instagram/demographics:
10222
10290
  get:
10291
+ x-resource-group: "analytics"
10223
10292
  operationId: getInstagramDemographics
10224
10293
  tags: [Analytics]
10225
10294
  summary: Get Instagram demographics
@@ -10340,6 +10409,7 @@ paths:
10340
10409
 
10341
10410
  /v1/analytics/youtube/demographics:
10342
10411
  get:
10412
+ x-resource-group: "analytics"
10343
10413
  operationId: getYouTubeDemographics
10344
10414
  tags: [Analytics]
10345
10415
  summary: Get YouTube demographics
@@ -10496,6 +10566,7 @@ paths:
10496
10566
 
10497
10567
  /v1/analytics/daily-metrics:
10498
10568
  get:
10569
+ x-resource-group: "analytics"
10499
10570
  operationId: getDailyMetrics
10500
10571
  tags: [Analytics]
10501
10572
  summary: Get daily aggregated metrics
@@ -10626,6 +10697,7 @@ paths:
10626
10697
 
10627
10698
  /v1/analytics/best-time:
10628
10699
  get:
10700
+ x-resource-group: "analytics"
10629
10701
  operationId: getBestTimeToPost
10630
10702
  tags: [Analytics]
10631
10703
  summary: Get best times to post
@@ -10699,6 +10771,7 @@ paths:
10699
10771
 
10700
10772
  /v1/analytics/content-decay:
10701
10773
  get:
10774
+ x-resource-group: "analytics"
10702
10775
  operationId: getContentDecay
10703
10776
  tags: [Analytics]
10704
10777
  summary: Get content performance decay
@@ -10790,6 +10863,7 @@ paths:
10790
10863
 
10791
10864
  /v1/analytics/posting-frequency:
10792
10865
  get:
10866
+ x-resource-group: "analytics"
10793
10867
  operationId: getPostingFrequency
10794
10868
  tags: [Analytics]
10795
10869
  summary: Get frequency vs engagement
@@ -10868,6 +10942,7 @@ paths:
10868
10942
 
10869
10943
  /v1/analytics/post-timeline:
10870
10944
  get:
10945
+ x-resource-group: "analytics"
10871
10946
  operationId: getPostTimeline
10872
10947
  tags: [Analytics]
10873
10948
  summary: Get post analytics timeline
@@ -10982,6 +11057,7 @@ paths:
10982
11057
 
10983
11058
  /v1/analytics/googlebusiness/performance:
10984
11059
  get:
11060
+ x-resource-group: "analytics"
10985
11061
  operationId: getGoogleBusinessPerformance
10986
11062
  tags: [Analytics]
10987
11063
  summary: Get GBP performance metrics
@@ -11106,6 +11182,7 @@ paths:
11106
11182
 
11107
11183
  /v1/analytics/googlebusiness/search-keywords:
11108
11184
  get:
11185
+ x-resource-group: "analytics"
11109
11186
  operationId: getGoogleBusinessSearchKeywords
11110
11187
  tags: [Analytics]
11111
11188
  summary: Get GBP search keywords
@@ -11203,6 +11280,7 @@ paths:
11203
11280
  # at 365 days.
11204
11281
  /v1/analytics/inbox/volume:
11205
11282
  get:
11283
+ x-resource-group: "analytics"
11206
11284
  operationId: getInboxVolume
11207
11285
  tags: [Inbox Analytics]
11208
11286
  summary: Get inbox messaging volume
@@ -11294,6 +11372,7 @@ paths:
11294
11372
 
11295
11373
  /v1/analytics/inbox/heatmap:
11296
11374
  get:
11375
+ x-resource-group: "analytics"
11297
11376
  operationId: getInboxHeatmap
11298
11377
  tags: [Inbox Analytics]
11299
11378
  summary: Get day × hour heatmap
@@ -11368,6 +11447,7 @@ paths:
11368
11447
 
11369
11448
  /v1/analytics/inbox/source-breakdown:
11370
11449
  get:
11450
+ x-resource-group: "analytics"
11371
11451
  operationId: getInboxSourceBreakdown
11372
11452
  tags: [Inbox Analytics]
11373
11453
  summary: Get inbox source breakdown
@@ -11443,6 +11523,7 @@ paths:
11443
11523
 
11444
11524
  /v1/analytics/inbox/response-time:
11445
11525
  get:
11526
+ x-resource-group: "analytics"
11446
11527
  operationId: getInboxResponseTime
11447
11528
  tags: [Inbox Analytics]
11448
11529
  summary: Get inbox response-time stats
@@ -11525,6 +11606,7 @@ paths:
11525
11606
 
11526
11607
  /v1/analytics/inbox/top-accounts:
11527
11608
  get:
11609
+ x-resource-group: "analytics"
11528
11610
  operationId: getInboxTopAccounts
11529
11611
  tags: [Inbox Analytics]
11530
11612
  summary: Get top accounts by inbox volume
@@ -11601,6 +11683,7 @@ paths:
11601
11683
 
11602
11684
  /v1/analytics/inbox/conversations:
11603
11685
  get:
11686
+ x-resource-group: "messages"
11604
11687
  operationId: listInboxConversationAnalytics
11605
11688
  tags: [Inbox Analytics]
11606
11689
  summary: List conversation analytics
@@ -11706,6 +11789,7 @@ paths:
11706
11789
 
11707
11790
  /v1/analytics/inbox/conversations/{conversationId}:
11708
11791
  get:
11792
+ x-resource-group: "messages"
11709
11793
  operationId: getInboxConversationAnalytics
11710
11794
  tags: [Inbox Analytics]
11711
11795
  summary: Get conversation analytics
@@ -11804,6 +11888,7 @@ paths:
11804
11888
 
11805
11889
  /v1/account-groups:
11806
11890
  get:
11891
+ x-resource-group: "accounts"
11807
11892
  operationId: listAccountGroups
11808
11893
  tags: [Account Groups]
11809
11894
  summary: List groups
@@ -11851,6 +11936,7 @@ paths:
11851
11936
  - "64e1f0a9e2b5af0012ab34cf"
11852
11937
  '401': { $ref: '#/components/responses/Unauthorized' }
11853
11938
  post:
11939
+ x-resource-group: "accounts"
11854
11940
  operationId: createAccountGroup
11855
11941
  tags: [Account Groups]
11856
11942
  summary: Create group
@@ -11911,6 +11997,7 @@ paths:
11911
11997
  '409': { description: Group name already exists }
11912
11998
  /v1/account-groups/{groupId}:
11913
11999
  put:
12000
+ x-resource-group: "accounts"
11914
12001
  operationId: updateAccountGroup
11915
12002
  tags: [Account Groups]
11916
12003
  summary: Update group
@@ -11962,6 +12049,7 @@ paths:
11962
12049
  '404': { $ref: '#/components/responses/NotFound' }
11963
12050
  '409': { description: Group name already exists }
11964
12051
  delete:
12052
+ x-resource-group: "accounts"
11965
12053
  operationId: deleteAccountGroup
11966
12054
  tags: [Account Groups]
11967
12055
  summary: Delete group
@@ -11987,6 +12075,7 @@ paths:
11987
12075
  '404': { $ref: '#/components/responses/NotFound' }
11988
12076
  /v1/media/presign:
11989
12077
  post:
12078
+ x-resource-group: "publishing"
11990
12079
  operationId: getMediaPresignedUrl
11991
12080
  tags: [Media]
11992
12081
  summary: Get upload URL
@@ -12067,6 +12156,7 @@ paths:
12067
12156
  '401': { $ref: '#/components/responses/Unauthorized' }
12068
12157
  /v1/reddit/search:
12069
12158
  get:
12159
+ x-resource-group: "engagement"
12070
12160
  operationId: searchReddit
12071
12161
  tags: [Reddit Search]
12072
12162
  summary: Search posts
@@ -12142,6 +12232,7 @@ paths:
12142
12232
  '429': { $ref: '#/components/responses/RateLimited' }
12143
12233
  /v1/reddit/feed:
12144
12234
  get:
12235
+ x-resource-group: "engagement"
12145
12236
  operationId: getRedditFeed
12146
12237
  tags: [Reddit Search]
12147
12238
  summary: Get subreddit feed
@@ -12229,6 +12320,7 @@ paths:
12229
12320
  '429': { $ref: '#/components/responses/RateLimited' }
12230
12321
  /v1/billing:
12231
12322
  get:
12323
+ x-resource-group: "billing"
12232
12324
  operationId: getBilling
12233
12325
  tags: [Usage]
12234
12326
  summary: Account billing snapshot (plan, cycle, balance, caps, status)
@@ -12253,6 +12345,7 @@ paths:
12253
12345
  '404': { $ref: '#/components/responses/NotFound' }
12254
12346
  /v1/billing/x-pricing:
12255
12347
  get:
12348
+ x-resource-group: "billing"
12256
12349
  operationId: getXApiPricing
12257
12350
  tags: [Usage]
12258
12351
  summary: Get X/Twitter API pricing table
@@ -12314,6 +12407,7 @@ paths:
12314
12407
  '401': { $ref: '#/components/responses/Unauthorized' }
12315
12408
  /v1/usage:
12316
12409
  get:
12410
+ x-resource-group: "billing"
12317
12411
  operationId: getUsage
12318
12412
  tags: [Usage]
12319
12413
  summary: Usage snapshot (default) or billed-spend metering (with params)
@@ -12396,6 +12490,7 @@ paths:
12396
12490
  '404': { $ref: '#/components/responses/NotFound' }
12397
12491
  /v1/usage-stats:
12398
12492
  get:
12493
+ x-resource-group: "billing"
12399
12494
  operationId: getUsageStats
12400
12495
  tags: [Usage]
12401
12496
  summary: Get plan and usage snapshot (plan, limits, payment status)
@@ -12494,6 +12589,7 @@ paths:
12494
12589
  '404': { $ref: '#/components/responses/NotFound' }
12495
12590
  /v1/usage/calls:
12496
12591
  get:
12592
+ x-resource-group: "billing"
12497
12593
  operationId: getCallsUsage
12498
12594
  tags: [Usage]
12499
12595
  summary: Calling usage and cost
@@ -12554,6 +12650,7 @@ paths:
12554
12650
 
12555
12651
  /v1/usage/sms:
12556
12652
  get:
12653
+ x-resource-group: "billing"
12557
12654
  operationId: getSmsUsage
12558
12655
  tags: [Usage]
12559
12656
  summary: SMS usage (volumes)
@@ -12605,6 +12702,7 @@ paths:
12605
12702
 
12606
12703
  /v1/posts:
12607
12704
  get:
12705
+ x-resource-group: "publishing"
12608
12706
  operationId: listPosts
12609
12707
  tags: [Posts]
12610
12708
  summary: List posts
@@ -12745,6 +12843,7 @@ paths:
12745
12843
  '400': { $ref: '#/components/responses/BadRequest' }
12746
12844
  '401': { $ref: '#/components/responses/Unauthorized' }
12747
12845
  post:
12846
+ x-resource-group: "publishing"
12748
12847
  operationId: createPost
12749
12848
  tags: [Posts]
12750
12849
  summary: Create post
@@ -13185,6 +13284,7 @@ paths:
13185
13284
  schema: { type: integer }
13186
13285
  /v1/posts/sync-external:
13187
13286
  post:
13287
+ x-resource-group: "publishing"
13188
13288
  operationId: syncExternalPosts
13189
13289
  tags: [Analytics]
13190
13290
  summary: Sync an external post
@@ -13264,6 +13364,7 @@ paths:
13264
13364
  $ref: '#/components/schemas/ErrorResponse'
13265
13365
  /v1/posts/{postId}:
13266
13366
  get:
13367
+ x-resource-group: "publishing"
13267
13368
  operationId: getPost
13268
13369
  tags: [Posts]
13269
13370
  summary: Get post
@@ -13387,6 +13488,7 @@ paths:
13387
13488
  schema: { $ref: '#/components/schemas/ErrorResponse' }
13388
13489
  '404': { $ref: '#/components/responses/NotFound' }
13389
13490
  put:
13491
+ x-resource-group: "publishing"
13390
13492
  operationId: updatePost
13391
13493
  tags: [Posts]
13392
13494
  summary: Update post
@@ -13505,6 +13607,7 @@ paths:
13505
13607
  schema: { $ref: '#/components/schemas/ErrorResponse' }
13506
13608
  '404': { $ref: '#/components/responses/NotFound' }
13507
13609
  delete:
13610
+ x-resource-group: "publishing"
13508
13611
  operationId: deletePost
13509
13612
  tags: [Posts]
13510
13613
  summary: Delete post
@@ -13537,6 +13640,7 @@ paths:
13537
13640
  '404': { $ref: '#/components/responses/NotFound' }
13538
13641
  /v1/posts/bulk-upload:
13539
13642
  post:
13643
+ x-resource-group: "publishing"
13540
13644
  operationId: bulkUploadPosts
13541
13645
  tags: [Posts]
13542
13646
  summary: Bulk upload from CSV
@@ -13625,6 +13729,7 @@ paths:
13625
13729
  type: object
13626
13730
  /v1/posts/{postId}/retry:
13627
13731
  post:
13732
+ x-resource-group: "publishing"
13628
13733
  operationId: retryPost
13629
13734
  tags: [Posts]
13630
13735
  summary: Retry failed post
@@ -13699,6 +13804,7 @@ paths:
13699
13804
  type: object
13700
13805
  /v1/posts/{postId}/unpublish:
13701
13806
  post:
13807
+ x-resource-group: "publishing"
13702
13808
  operationId: unpublishPost
13703
13809
  tags: [Posts]
13704
13810
  summary: Unpublish post
@@ -13763,6 +13869,7 @@ paths:
13763
13869
  description: Platform API deletion failed
13764
13870
  /v1/posts/{postId}/edit:
13765
13871
  post:
13872
+ x-resource-group: "publishing"
13766
13873
  operationId: editPost
13767
13874
  tags: [Posts]
13768
13875
  summary: Edit published post
@@ -13853,6 +13960,7 @@ paths:
13853
13960
  description: Platform API edit failed for a reason the platform did not classify.
13854
13961
  /v1/posts/{postId}/update-metadata:
13855
13962
  post:
13963
+ x-resource-group: "publishing"
13856
13964
  operationId: updatePostMetadata
13857
13965
  tags: [Posts]
13858
13966
  summary: Update post metadata
@@ -13981,6 +14089,7 @@ paths:
13981
14089
  description: Platform API update failed
13982
14090
  /v1/users:
13983
14091
  get:
14092
+ x-resource-group: "accounts"
13984
14093
  operationId: listUsers
13985
14094
  tags: [Users]
13986
14095
  summary: List users
@@ -14030,6 +14139,7 @@ paths:
14030
14139
  '401': { $ref: '#/components/responses/Unauthorized' }
14031
14140
  /v1/users/{userId}:
14032
14141
  get:
14142
+ x-resource-group: "accounts"
14033
14143
  operationId: getUser
14034
14144
  tags: [Users]
14035
14145
  summary: Get user
@@ -14072,6 +14182,7 @@ paths:
14072
14182
  '404': { $ref: '#/components/responses/NotFound' }
14073
14183
  /v1/profiles:
14074
14184
  get:
14185
+ x-resource-group: "accounts"
14075
14186
  operationId: listProfiles
14076
14187
  tags: [Profiles]
14077
14188
  summary: List profiles
@@ -14121,6 +14232,7 @@ paths:
14121
14232
  '400': { $ref: '#/components/responses/BadRequest' }
14122
14233
  '401': { $ref: '#/components/responses/Unauthorized' }
14123
14234
  post:
14235
+ x-resource-group: "accounts"
14124
14236
  operationId: createProfile
14125
14237
  tags: [Profiles]
14126
14238
  summary: Create profile
@@ -14173,6 +14285,7 @@ paths:
14173
14285
  '422': { $ref: '#/components/responses/IdempotencyKeyReused' }
14174
14286
  /v1/profiles/{profileId}:
14175
14287
  get:
14288
+ x-resource-group: "accounts"
14176
14289
  operationId: getProfile
14177
14290
  tags: [Profiles]
14178
14291
  summary: Get profile
@@ -14201,6 +14314,7 @@ paths:
14201
14314
  '401': { $ref: '#/components/responses/Unauthorized' }
14202
14315
  '404': { $ref: '#/components/responses/NotFound' }
14203
14316
  put:
14317
+ x-resource-group: "accounts"
14204
14318
  operationId: updateProfile
14205
14319
  tags: [Profiles]
14206
14320
  summary: Update profile
@@ -14247,6 +14361,7 @@ paths:
14247
14361
  '404': { $ref: '#/components/responses/NotFound' }
14248
14362
  '409': { description: "A profile with this name already exists (code: profile_name_conflict)." }
14249
14363
  delete:
14364
+ x-resource-group: "accounts"
14250
14365
  operationId: deleteProfile
14251
14366
  tags: [Profiles]
14252
14367
  summary: Delete profile
@@ -14275,6 +14390,7 @@ paths:
14275
14390
  '404': { $ref: '#/components/responses/NotFound' }
14276
14391
  /v1/accounts:
14277
14392
  get:
14393
+ x-resource-group: "accounts"
14278
14394
  operationId: listAccounts
14279
14395
  tags: [Accounts]
14280
14396
  summary: List accounts
@@ -14341,6 +14457,7 @@ paths:
14341
14457
  '401': { $ref: '#/components/responses/Unauthorized' }
14342
14458
  /v1/accounts/follower-stats:
14343
14459
  get:
14460
+ x-resource-group: "analytics"
14344
14461
  operationId: getFollowerStats
14345
14462
  tags: [Accounts, Analytics]
14346
14463
  summary: Get follower stats
@@ -14409,6 +14526,7 @@ paths:
14409
14526
  requiresAddon: { type: boolean, example: true }
14410
14527
  /v1/accounts/{accountId}:
14411
14528
  put:
14529
+ x-resource-group: "accounts"
14412
14530
  operationId: updateAccount
14413
14531
  tags: [Accounts]
14414
14532
  summary: Update account
@@ -14493,6 +14611,7 @@ paths:
14493
14611
  '401': { $ref: '#/components/responses/Unauthorized' }
14494
14612
  '404': { $ref: '#/components/responses/NotFound' }
14495
14613
  patch:
14614
+ x-resource-group: "accounts"
14496
14615
  operationId: moveAccountToProfile
14497
14616
  tags: [Accounts]
14498
14617
  summary: Move account to another profile
@@ -14539,6 +14658,7 @@ paths:
14539
14658
  '403': { description: API key does not have access to the source account or target profile }
14540
14659
  '404': { description: Account or target profile not found }
14541
14660
  delete:
14661
+ x-resource-group: "accounts"
14542
14662
  operationId: deleteAccount
14543
14663
  tags: [Accounts]
14544
14664
  summary: Disconnect account
@@ -14563,6 +14683,7 @@ paths:
14563
14683
  '404': { $ref: '#/components/responses/NotFound' }
14564
14684
  /v1/accounts/health:
14565
14685
  get:
14686
+ x-resource-group: "accounts"
14566
14687
  operationId: getAllAccountsHealth
14567
14688
  tags: [Accounts]
14568
14689
  summary: Check accounts health
@@ -14648,6 +14769,7 @@ paths:
14648
14769
  '401': { $ref: '#/components/responses/Unauthorized' }
14649
14770
  /v1/accounts/{accountId}/whatsapp/register:
14650
14771
  post:
14772
+ x-resource-group: "accounts"
14651
14773
  operationId: registerWhatsAppNumber
14652
14774
  tags: [WhatsApp]
14653
14775
  summary: Register a connected WhatsApp number on the Cloud API
@@ -14697,6 +14819,7 @@ paths:
14697
14819
  description: 'Meta rejected the registration (e.g. PIN mismatch), or the number cannot be registered through the API.'
14698
14820
  /v1/accounts/{accountId}/health:
14699
14821
  get:
14822
+ x-resource-group: "accounts"
14700
14823
  operationId: getAccountHealth
14701
14824
  tags: [Accounts]
14702
14825
  summary: Check account health
@@ -14801,6 +14924,7 @@ paths:
14801
14924
  '404': { $ref: '#/components/responses/NotFound' }
14802
14925
  /v1/accounts/{accountId}/tiktok/creator-info:
14803
14926
  get:
14927
+ x-resource-group: "accounts"
14804
14928
  operationId: getTikTokCreatorInfo
14805
14929
  tags: [Accounts]
14806
14930
  summary: Get TikTok creator info
@@ -14909,6 +15033,7 @@ paths:
14909
15033
  error: "TikTok creator has reached the daily posting limit. Please try again later."
14910
15034
  /v1/auth/verify:
14911
15035
  get:
15036
+ x-resource-group: "public"
14912
15037
  operationId: verifyCredential
14913
15038
  tags: [API Keys]
14914
15039
  summary: Verify credential
@@ -14937,6 +15062,7 @@ paths:
14937
15062
  '401': { $ref: '#/components/responses/Unauthorized' }
14938
15063
  /v1/api-keys:
14939
15064
  get:
15065
+ x-resource-group: "admin-plane"
14940
15066
  operationId: listApiKeys
14941
15067
  tags: [API Keys]
14942
15068
  summary: List keys
@@ -14974,7 +15100,9 @@ paths:
14974
15100
  color: "#ffeda0"
14975
15101
  permission: "read"
14976
15102
  '401': { $ref: '#/components/responses/Unauthorized' }
15103
+ '403': { $ref: '#/components/responses/ResourceGroupForbidden' }
14977
15104
  post:
15105
+ x-resource-group: "admin-plane"
14978
15106
  operationId: createApiKey
14979
15107
  tags: [API Keys]
14980
15108
  summary: Create key
@@ -15005,11 +15133,25 @@ paths:
15005
15133
  enum: [read-write, read]
15006
15134
  description: "'read-write' allows all operations (default), 'read' restricts to GET requests only"
15007
15135
  default: read-write
15136
+ disabledResourceGroups:
15137
+ type: array
15138
+ items:
15139
+ type: string
15140
+ enum: [publishing, engagement, messages, contacts, analytics, ads, telephony, accounts, billing, webhooks]
15141
+ description: >-
15142
+ Resource groups to DISABLE on this key (opt-out denylist).
15143
+ Omit for a legacy full-access key. A key with any group
15144
+ disabled mints with the zrk_ prefix, gets 403 with
15145
+ code=insufficient_permissions and required_group on
15146
+ operations in disabled groups (each operation's group is
15147
+ published as x-resource-group), and can never manage API
15148
+ keys, invites, or member identity. With 'messages'
15149
+ disabled, the KEY cannot access private messages; the
15150
+ ACCOUNT's pre-existing webhook subscriptions are a
15151
+ separate grant surface.
15008
15152
  example:
15009
- name: "Analytics Read-Only Key"
15010
- scope: "profiles"
15011
- profileIds: ["6507a1b2c3d4e5f6a7b8c9d0"]
15012
- permission: "read"
15153
+ name: "No Private Messages Key"
15154
+ disabledResourceGroups: ["messages", "contacts", "webhooks"]
15013
15155
  responses:
15014
15156
  '201':
15015
15157
  description: Created
@@ -15024,21 +15166,21 @@ paths:
15024
15166
  message: "API key created successfully"
15025
15167
  apiKey:
15026
15168
  id: "6507a1b2c3d4e5f6a7b8c9d0"
15027
- name: "Analytics Read-Only Key"
15028
- keyPreview: "sk_12345678...90abcdef"
15029
- key: "sk_1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
15169
+ name: "No Private Messages Key"
15170
+ keyPreview: "zrk_12345678...90abcdef"
15171
+ key: "zrk_1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
15030
15172
  expiresAt: null
15031
15173
  createdAt: "2024-01-15T10:30:00Z"
15032
- scope: "profiles"
15033
- profileIds:
15034
- - _id: "6507a1b2c3d4e5f6a7b8c9d0"
15035
- name: "Main Brand"
15036
- color: "#ffeda0"
15037
- permission: "read"
15174
+ scope: "full"
15175
+ profileIds: []
15176
+ permission: "read-write"
15177
+ disabledResourceGroups: ["messages", "contacts", "webhooks"]
15038
15178
  '400': { description: "Invalid request (missing name, invalid scope/permission, or missing profileIds when scope is 'profiles')" }
15039
15179
  '401': { $ref: '#/components/responses/Unauthorized' }
15180
+ '403': { $ref: '#/components/responses/ResourceGroupForbidden' }
15040
15181
  /v1/api-keys/{keyId}:
15041
15182
  delete:
15183
+ x-resource-group: "admin-plane"
15042
15184
  operationId: deleteApiKey
15043
15185
  tags: [API Keys]
15044
15186
  summary: Delete key
@@ -15060,10 +15202,12 @@ paths:
15060
15202
  example:
15061
15203
  message: "API key deleted successfully"
15062
15204
  '401': { $ref: '#/components/responses/Unauthorized' }
15205
+ '403': { $ref: '#/components/responses/ResourceGroupForbidden' }
15063
15206
  '404': { $ref: '#/components/responses/NotFound' }
15064
15207
 
15065
15208
  /v1/me/connected-apps:
15066
15209
  get:
15210
+ x-resource-group: "admin-plane"
15067
15211
  operationId: listConnectedApps
15068
15212
  tags: [Connected Apps]
15069
15213
  summary: List connected apps
@@ -15071,9 +15215,10 @@ paths:
15071
15215
  Returns the OAuth clients (AI assistants and MCP connectors) the authenticated
15072
15216
  user has authorized and that still hold a live token.
15073
15217
 
15074
- Requires a session or a full-scope API key. A profile-scoped API key or an
15075
- OAuth access token is rejected with 403: an app must not be able to enumerate
15076
- its sibling authorizations.
15218
+ Requires a session or a full-access API key. A profile-scoped API key, a
15219
+ restricted (zrk_) API key, or an OAuth access token is rejected with 403: an
15220
+ app must not be able to enumerate its sibling authorizations, and connected-app
15221
+ management is admin-plane.
15077
15222
  responses:
15078
15223
  '200':
15079
15224
  description: Connected apps
@@ -15095,13 +15240,10 @@ paths:
15095
15240
  lastUsedAt: "2026-07-30T18:02:11Z"
15096
15241
  tokenCount: 2
15097
15242
  '401': { $ref: '#/components/responses/Unauthorized' }
15098
- '403':
15099
- description: 'The calling credential may not manage OAuth authorizations (profile-scoped API key or OAuth access token). Error code: insufficient_permissions.'
15100
- content:
15101
- application/json:
15102
- schema: { $ref: '#/components/schemas/ErrorResponse' }
15243
+ '403': { $ref: '#/components/responses/ResourceGroupForbidden' }
15103
15244
  /v1/me/connected-apps/{clientId}:
15104
15245
  delete:
15246
+ x-resource-group: "admin-plane"
15105
15247
  operationId: revokeConnectedApp
15106
15248
  tags: [Connected Apps]
15107
15249
  summary: Revoke connected app
@@ -15112,6 +15254,9 @@ paths:
15112
15254
 
15113
15255
  Idempotent while the authorization is still on record: revoking an app that
15114
15256
  was already revoked returns 200 with `revokedTokens: 0`.
15257
+
15258
+ Requires a session or a full-access API key. A profile-scoped API key, a
15259
+ restricted (zrk_) API key, or an OAuth access token is rejected with 403.
15115
15260
  parameters:
15116
15261
  - name: clientId
15117
15262
  in: path
@@ -15137,11 +15282,7 @@ paths:
15137
15282
  invalidatedCodes: 0
15138
15283
  '400': { $ref: '#/components/responses/BadRequest' }
15139
15284
  '401': { $ref: '#/components/responses/Unauthorized' }
15140
- '403':
15141
- description: 'The calling credential may not manage OAuth authorizations (profile-scoped API key or OAuth access token). Error code: insufficient_permissions.'
15142
- content:
15143
- application/json:
15144
- schema: { $ref: '#/components/schemas/ErrorResponse' }
15285
+ '403': { $ref: '#/components/responses/ResourceGroupForbidden' }
15145
15286
  '404':
15146
15287
  description: 'The authenticated user has never authorized this client. Error code: oauth_client_not_found.'
15147
15288
  content:
@@ -15150,12 +15291,16 @@ paths:
15150
15291
 
15151
15292
  /v1/invite/tokens:
15152
15293
  post:
15294
+ x-resource-group: "admin-plane"
15153
15295
  operationId: createInviteToken
15154
15296
  tags: [Invites]
15155
15297
  summary: Create invite token
15156
15298
  description: |
15157
15299
  Generate a secure invite link to grant team members access to your profiles.
15158
15300
  Invites expire after 7 days and are single-use.
15301
+
15302
+ Returns 403 when a requested profile is not found or not owned, or when
15303
+ called with a restricted (zrk_) API key: invite management is admin-plane.
15159
15304
  requestBody:
15160
15305
  required: true
15161
15306
  content:
@@ -15212,10 +15357,11 @@ paths:
15212
15357
  inviteUrl: "https://zernio.com/invite/inv_abc123def456ghi789"
15213
15358
  '400': { description: Invalid request }
15214
15359
  '401': { $ref: '#/components/responses/Unauthorized' }
15215
- '403': { description: One or more profiles not found or not owned }
15360
+ '403': { $ref: '#/components/responses/ResourceGroupForbidden' }
15216
15361
 
15217
15362
  /v1/connect/{platform}:
15218
15363
  get:
15364
+ x-resource-group: "accounts"
15219
15365
  operationId: getConnectUrl
15220
15366
  tags: [Connect]
15221
15367
  summary: Get OAuth connect URL
@@ -15272,6 +15418,7 @@ paths:
15272
15418
  '404':
15273
15419
  description: Profile not found
15274
15420
  post:
15421
+ x-resource-group: "accounts"
15275
15422
  operationId: handleOAuthCallback
15276
15423
  tags: [Connect]
15277
15424
  summary: Complete OAuth callback
@@ -15302,6 +15449,7 @@ paths:
15302
15449
 
15303
15450
  /v1/connect/{platform}/ads:
15304
15451
  get:
15452
+ x-resource-group: "accounts"
15305
15453
  operationId: connectAds
15306
15454
  tags: [Connect]
15307
15455
  summary: Connect ads for a platform
@@ -15439,6 +15587,7 @@ paths:
15439
15587
 
15440
15588
  /v1/connect/tiktok-ads:
15441
15589
  patch:
15590
+ x-resource-group: "accounts"
15442
15591
  operationId: configureTikTokAdsBrandIdentity
15443
15592
  tags: [Connect]
15444
15593
  summary: Set TikTok brand identity
@@ -15509,6 +15658,7 @@ paths:
15509
15658
 
15510
15659
  /v1/connect/facebook/select-page:
15511
15660
  get:
15661
+ x-resource-group: "accounts"
15512
15662
  operationId: listFacebookPages
15513
15663
  tags: [Connect]
15514
15664
  summary: List Facebook pages
@@ -15565,6 +15715,7 @@ paths:
15565
15715
  properties:
15566
15716
  error: { type: string }
15567
15717
  post:
15718
+ x-resource-group: "accounts"
15568
15719
  operationId: selectFacebookPage
15569
15720
  tags: [Connect]
15570
15721
  summary: Select Facebook page
@@ -15670,6 +15821,7 @@ paths:
15670
15821
 
15671
15822
  /v1/connect/googlebusiness/locations:
15672
15823
  get:
15824
+ x-resource-group: "accounts"
15673
15825
  operationId: listGoogleBusinessLocations
15674
15826
  tags: [Connect]
15675
15827
  summary: List GBP locations
@@ -15763,6 +15915,7 @@ paths:
15763
15915
 
15764
15916
  /v1/connect/googlebusiness/select-location:
15765
15917
  post:
15918
+ x-resource-group: "accounts"
15766
15919
  operationId: selectGoogleBusinessLocation
15767
15920
  tags: [Connect]
15768
15921
  summary: Select GBP location
@@ -15857,6 +16010,7 @@ paths:
15857
16010
 
15858
16011
  /v1/accounts/{accountId}/gmb-reviews:
15859
16012
  get:
16013
+ x-resource-group: "engagement"
15860
16014
  operationId: getGoogleBusinessReviews
15861
16015
  tags: [GMB Reviews]
15862
16016
  summary: Get reviews
@@ -15995,6 +16149,7 @@ paths:
15995
16149
 
15996
16150
  /v1/accounts/{accountId}/gmb-verifications:
15997
16151
  get:
16152
+ x-resource-group: "accounts"
15998
16153
  operationId: getGoogleBusinessVerifications
15999
16154
  tags: [GMB Verifications]
16000
16155
  summary: Get verification state
@@ -16074,6 +16229,7 @@ paths:
16074
16229
  schema: { $ref: '#/components/schemas/ErrorResponse' }
16075
16230
  '404': { $ref: '#/components/responses/NotFound' }
16076
16231
  post:
16232
+ x-resource-group: "accounts"
16077
16233
  operationId: startGoogleBusinessVerification
16078
16234
  tags: [GMB Verifications]
16079
16235
  summary: Start a verification
@@ -16145,6 +16301,7 @@ paths:
16145
16301
 
16146
16302
  /v1/accounts/{accountId}/gmb-verifications/options:
16147
16303
  post:
16304
+ x-resource-group: "accounts"
16148
16305
  operationId: fetchGoogleBusinessVerificationOptions
16149
16306
  tags: [GMB Verifications]
16150
16307
  summary: Fetch verification options
@@ -16209,6 +16366,7 @@ paths:
16209
16366
 
16210
16367
  /v1/accounts/{accountId}/gmb-verifications/{verificationId}/complete:
16211
16368
  post:
16369
+ x-resource-group: "accounts"
16212
16370
  operationId: completeGoogleBusinessVerification
16213
16371
  tags: [GMB Verifications]
16214
16372
  summary: Complete a verification
@@ -16276,6 +16434,7 @@ paths:
16276
16434
 
16277
16435
  /v1/accounts/{accountId}/gmb-food-menus:
16278
16436
  get:
16437
+ x-resource-group: "accounts"
16279
16438
  operationId: getGoogleBusinessFoodMenus
16280
16439
  tags: [GMB Food Menus]
16281
16440
  summary: Get food menus
@@ -16359,6 +16518,7 @@ paths:
16359
16518
  application/json:
16360
16519
  schema: { $ref: '#/components/schemas/ErrorResponse' }
16361
16520
  put:
16521
+ x-resource-group: "accounts"
16362
16522
  operationId: updateGoogleBusinessFoodMenus
16363
16523
  tags: [GMB Food Menus]
16364
16524
  summary: Update food menus
@@ -16451,6 +16611,7 @@ paths:
16451
16611
 
16452
16612
  /v1/accounts/{accountId}/gmb-location-details:
16453
16613
  get:
16614
+ x-resource-group: "accounts"
16454
16615
  operationId: getGoogleBusinessLocationDetails
16455
16616
  tags: [GMB Location Details]
16456
16617
  summary: Get location details
@@ -16631,6 +16792,7 @@ paths:
16631
16792
  schema: { $ref: '#/components/schemas/ErrorResponse' }
16632
16793
  '404': { $ref: '#/components/responses/NotFound' }
16633
16794
  put:
16795
+ x-resource-group: "accounts"
16634
16796
  operationId: updateGoogleBusinessLocationDetails
16635
16797
  tags: [GMB Location Details]
16636
16798
  summary: Update location details
@@ -16826,6 +16988,7 @@ paths:
16826
16988
 
16827
16989
  /v1/accounts/{accountId}/gmb-media:
16828
16990
  get:
16991
+ x-resource-group: "accounts"
16829
16992
  operationId: listGoogleBusinessMedia
16830
16993
  tags: [GMB Media]
16831
16994
  summary: List media
@@ -16891,6 +17054,7 @@ paths:
16891
17054
  application/json:
16892
17055
  schema: { $ref: '#/components/schemas/ErrorResponse' }
16893
17056
  post:
17057
+ x-resource-group: "accounts"
16894
17058
  operationId: createGoogleBusinessMedia
16895
17059
  tags: [GMB Media]
16896
17060
  summary: Upload photo
@@ -16951,6 +17115,7 @@ paths:
16951
17115
  application/json:
16952
17116
  schema: { $ref: '#/components/schemas/ErrorResponse' }
16953
17117
  delete:
17118
+ x-resource-group: "accounts"
16954
17119
  operationId: deleteGoogleBusinessMedia
16955
17120
  tags: [GMB Media]
16956
17121
  summary: Delete photo
@@ -16995,6 +17160,7 @@ paths:
16995
17160
 
16996
17161
  /v1/accounts/{accountId}/gmb-attribute-metadata:
16997
17162
  get:
17163
+ x-resource-group: "accounts"
16998
17164
  operationId: getGmbAttributeMetadata
16999
17165
  tags: [GMB Attributes]
17000
17166
  summary: Get attribute metadata
@@ -17134,6 +17300,7 @@ paths:
17134
17300
 
17135
17301
  /v1/accounts/{accountId}/gmb-attributes:
17136
17302
  get:
17303
+ x-resource-group: "accounts"
17137
17304
  operationId: getGoogleBusinessAttributes
17138
17305
  tags: [GMB Attributes]
17139
17306
  summary: Get attributes
@@ -17200,6 +17367,7 @@ paths:
17200
17367
  application/json:
17201
17368
  schema: { $ref: '#/components/schemas/ErrorResponse' }
17202
17369
  put:
17370
+ x-resource-group: "accounts"
17203
17371
  operationId: updateGoogleBusinessAttributes
17204
17372
  tags: [GMB Attributes]
17205
17373
  summary: Update attributes
@@ -17287,6 +17455,7 @@ paths:
17287
17455
 
17288
17456
  /v1/accounts/{accountId}/gmb-place-actions:
17289
17457
  get:
17458
+ x-resource-group: "accounts"
17290
17459
  operationId: listGoogleBusinessPlaceActions
17291
17460
  tags: [GMB Place Actions]
17292
17461
  summary: List action links
@@ -17353,6 +17522,7 @@ paths:
17353
17522
  application/json:
17354
17523
  schema: { $ref: '#/components/schemas/ErrorResponse' }
17355
17524
  post:
17525
+ x-resource-group: "accounts"
17356
17526
  operationId: createGoogleBusinessPlaceAction
17357
17527
  tags: [GMB Place Actions]
17358
17528
  summary: Create action link
@@ -17410,6 +17580,7 @@ paths:
17410
17580
  application/json:
17411
17581
  schema: { $ref: '#/components/schemas/ErrorResponse' }
17412
17582
  delete:
17583
+ x-resource-group: "accounts"
17413
17584
  operationId: deleteGoogleBusinessPlaceAction
17414
17585
  tags: [GMB Place Actions]
17415
17586
  summary: Delete action link
@@ -17452,6 +17623,7 @@ paths:
17452
17623
  application/json:
17453
17624
  schema: { $ref: '#/components/schemas/ErrorResponse' }
17454
17625
  patch:
17626
+ x-resource-group: "accounts"
17455
17627
  operationId: updateGoogleBusinessPlaceAction
17456
17628
  tags: [GMB Place Actions]
17457
17629
  summary: Update action link
@@ -17516,6 +17688,7 @@ paths:
17516
17688
 
17517
17689
  /v1/accounts/{accountId}/gmb-services:
17518
17690
  get:
17691
+ x-resource-group: "accounts"
17519
17692
  operationId: getGoogleBusinessServices
17520
17693
  tags: [GMB Services]
17521
17694
  summary: Get services
@@ -17580,6 +17753,7 @@ paths:
17580
17753
  application/json:
17581
17754
  schema: { $ref: '#/components/schemas/ErrorResponse' }
17582
17755
  put:
17756
+ x-resource-group: "accounts"
17583
17757
  operationId: updateGoogleBusinessServices
17584
17758
  tags: [GMB Services]
17585
17759
  summary: Replace services
@@ -17665,6 +17839,7 @@ paths:
17665
17839
 
17666
17840
  /v1/accounts/{accountId}/gmb-reviews/batch:
17667
17841
  post:
17842
+ x-resource-group: "engagement"
17668
17843
  operationId: batchGetGoogleBusinessReviews
17669
17844
  tags: [GMB Reviews]
17670
17845
  summary: Batch get reviews
@@ -17749,6 +17924,7 @@ paths:
17749
17924
 
17750
17925
  /v1/accounts/{accountId}/gmb-reviews/{reviewId}/reply:
17751
17926
  post:
17927
+ x-resource-group: "engagement"
17752
17928
  operationId: replyToGoogleBusinessReview
17753
17929
  tags: [GMB Reviews]
17754
17930
  summary: Reply to a review
@@ -17820,6 +17996,7 @@ paths:
17820
17996
  application/json:
17821
17997
  schema: { $ref: '#/components/schemas/ErrorResponse' }
17822
17998
  delete:
17999
+ x-resource-group: "engagement"
17823
18000
  operationId: deleteGoogleBusinessReviewReply
17824
18001
  tags: [GMB Reviews]
17825
18002
  summary: Delete a review reply
@@ -17874,6 +18051,7 @@ paths:
17874
18051
 
17875
18052
  /v1/connect/pending-data:
17876
18053
  get:
18054
+ x-resource-group: "public"
17877
18055
  operationId: getPendingOAuthData
17878
18056
  tags: [Connect]
17879
18057
  summary: Get pending OAuth data
@@ -17963,6 +18141,7 @@ paths:
17963
18141
 
17964
18142
  /v1/connect/linkedin/organizations:
17965
18143
  get:
18144
+ x-resource-group: "public"
17966
18145
  operationId: listLinkedInOrganizations
17967
18146
  tags: [Connect]
17968
18147
  summary: List LinkedIn orgs
@@ -18026,6 +18205,7 @@ paths:
18026
18205
 
18027
18206
  /v1/connect/linkedin/select-organization:
18028
18207
  post:
18208
+ x-resource-group: "accounts"
18029
18209
  operationId: selectLinkedInOrganization
18030
18210
  tags: [Connect]
18031
18211
  summary: Select LinkedIn org
@@ -18146,6 +18326,7 @@ paths:
18146
18326
 
18147
18327
  /v1/connect/pinterest/select-board:
18148
18328
  get:
18329
+ x-resource-group: "accounts"
18149
18330
  operationId: listPinterestBoardsForSelection
18150
18331
  tags: [Connect]
18151
18332
  summary: List Pinterest boards
@@ -18198,6 +18379,7 @@ paths:
18198
18379
  '403': { description: No access to profile }
18199
18380
  '500': { description: Failed to fetch boards }
18200
18381
  post:
18382
+ x-resource-group: "accounts"
18201
18383
  operationId: selectPinterestBoard
18202
18384
  tags: [Connect]
18203
18385
  summary: Select Pinterest board
@@ -18303,6 +18485,7 @@ paths:
18303
18485
 
18304
18486
  /v1/connect/snapchat/select-profile:
18305
18487
  get:
18488
+ x-resource-group: "accounts"
18306
18489
  operationId: listSnapchatProfiles
18307
18490
  tags: [Connect]
18308
18491
  summary: List Snapchat profiles
@@ -18358,6 +18541,7 @@ paths:
18358
18541
  '403': { description: No access to profile }
18359
18542
  '500': { description: Failed to fetch public profiles }
18360
18543
  post:
18544
+ x-resource-group: "accounts"
18361
18545
  operationId: selectSnapchatProfile
18362
18546
  tags: [Connect]
18363
18547
  summary: Select Snapchat profile
@@ -18486,6 +18670,7 @@ paths:
18486
18670
 
18487
18671
  /v1/connect/bluesky/credentials:
18488
18672
  post:
18673
+ x-resource-group: "accounts"
18489
18674
  operationId: connectBlueskyCredentials
18490
18675
  tags: [Connect]
18491
18676
  summary: Connect Bluesky account
@@ -18543,6 +18728,7 @@ paths:
18543
18728
 
18544
18729
  /v1/connect/openai-ads/credentials:
18545
18730
  post:
18731
+ x-resource-group: "accounts"
18546
18732
  operationId: connectOpenAIAdsCredentials
18547
18733
  tags: [Connect]
18548
18734
  summary: Connect an OpenAI Ads account
@@ -18600,6 +18786,7 @@ paths:
18600
18786
 
18601
18787
  /v1/connect/whatsapp/credentials:
18602
18788
  post:
18789
+ x-resource-group: "accounts"
18603
18790
  operationId: connectWhatsAppCredentials
18604
18791
  tags: [Connect]
18605
18792
  summary: Connect WhatsApp via credentials
@@ -18690,6 +18877,7 @@ paths:
18690
18877
 
18691
18878
  /v1/connect/whatsapp/select-phone-number:
18692
18879
  get:
18880
+ x-resource-group: "accounts"
18693
18881
  operationId: listWhatsAppPhoneNumbers
18694
18882
  tags: [Connect]
18695
18883
  summary: List numbers for selection
@@ -18763,6 +18951,7 @@ paths:
18763
18951
  application/json:
18764
18952
  schema: { $ref: '#/components/schemas/ErrorResponse' }
18765
18953
  post:
18954
+ x-resource-group: "accounts"
18766
18955
  operationId: completeWhatsAppPhoneSelection
18767
18956
  tags: [Connect]
18768
18957
  summary: Complete number selection
@@ -18848,6 +19037,7 @@ paths:
18848
19037
 
18849
19038
  /v1/connect/telegram:
18850
19039
  get:
19040
+ x-resource-group: "accounts"
18851
19041
  operationId: getTelegramConnectStatus
18852
19042
  tags: [Connect]
18853
19043
  summary: Generate Telegram code
@@ -18903,6 +19093,7 @@ paths:
18903
19093
  '404': { description: Profile not found }
18904
19094
  '500': { description: Internal error }
18905
19095
  post:
19096
+ x-resource-group: "accounts"
18906
19097
  operationId: initiateTelegramConnect
18907
19098
  tags: [Connect]
18908
19099
  summary: Connect Telegram directly
@@ -18957,6 +19148,7 @@ paths:
18957
19148
  '404': { description: Profile not found }
18958
19149
  '500': { description: Internal error }
18959
19150
  patch:
19151
+ x-resource-group: "accounts"
18960
19152
  operationId: completeTelegramConnect
18961
19153
  tags: [Connect]
18962
19154
  summary: Check Telegram status
@@ -19032,6 +19224,7 @@ paths:
19032
19224
 
19033
19225
  /v1/accounts/{accountId}/facebook-page:
19034
19226
  get:
19227
+ x-resource-group: "accounts"
19035
19228
  operationId: getFacebookPages
19036
19229
  tags: [Connect]
19037
19230
  summary: List Facebook pages
@@ -19086,6 +19279,7 @@ paths:
19086
19279
  '401': { $ref: '#/components/responses/Unauthorized' }
19087
19280
  '404': { description: Account not found }
19088
19281
  put:
19282
+ x-resource-group: "accounts"
19089
19283
  operationId: updateFacebookPage
19090
19284
  tags: [Connect]
19091
19285
  summary: Update Facebook page
@@ -19131,6 +19325,7 @@ paths:
19131
19325
 
19132
19326
  /v1/accounts/{accountId}/linkedin-organizations:
19133
19327
  get:
19328
+ x-resource-group: "accounts"
19134
19329
  operationId: getLinkedInOrganizations
19135
19330
  tags: [Connect]
19136
19331
  summary: List LinkedIn orgs
@@ -19172,6 +19367,7 @@ paths:
19172
19367
 
19173
19368
  /v1/accounts/{accountId}/linkedin-aggregate-analytics:
19174
19369
  get:
19370
+ x-resource-group: "analytics"
19175
19371
  operationId: getLinkedInAggregateAnalytics
19176
19372
  tags: [Analytics]
19177
19373
  summary: Get LinkedIn aggregate stats
@@ -19382,6 +19578,7 @@ paths:
19382
19578
 
19383
19579
  /v1/accounts/{accountId}/linkedin-post-analytics:
19384
19580
  get:
19581
+ x-resource-group: "analytics"
19385
19582
  operationId: getLinkedInPostAnalytics
19386
19583
  tags: [Analytics]
19387
19584
  summary: Get LinkedIn post stats
@@ -19498,6 +19695,7 @@ paths:
19498
19695
 
19499
19696
  /v1/accounts/{accountId}/linkedin-post-reactions:
19500
19697
  get:
19698
+ x-resource-group: "analytics"
19501
19699
  operationId: getLinkedInPostReactions
19502
19700
  tags: [Analytics]
19503
19701
  summary: Get LinkedIn post reactions
@@ -19600,6 +19798,7 @@ paths:
19600
19798
 
19601
19799
  /v1/accounts/{accountId}/linkedin-organization:
19602
19800
  put:
19801
+ x-resource-group: "accounts"
19603
19802
  operationId: updateLinkedInOrganization
19604
19803
  tags: [Connect]
19605
19804
  summary: Switch LinkedIn account type
@@ -19647,6 +19846,7 @@ paths:
19647
19846
 
19648
19847
  /v1/accounts/{accountId}/linkedin-mentions:
19649
19848
  get:
19849
+ x-resource-group: "accounts"
19650
19850
  operationId: getLinkedInMentions
19651
19851
  tags: [LinkedIn Mentions]
19652
19852
  summary: Resolve LinkedIn mention
@@ -19804,6 +20004,7 @@ paths:
19804
20004
 
19805
20005
  /v1/accounts/{accountId}/instagram/stories:
19806
20006
  get:
20007
+ x-resource-group: "analytics"
19807
20008
  operationId: listInstagramStories
19808
20009
  tags: [Instagram]
19809
20010
  summary: List active Instagram stories
@@ -19851,6 +20052,7 @@ paths:
19851
20052
 
19852
20053
  /v1/accounts/{accountId}/instagram/publishing-limit:
19853
20054
  get:
20055
+ x-resource-group: "accounts"
19854
20056
  operationId: getInstagramPublishingLimit
19855
20057
  tags: [Instagram]
19856
20058
  summary: Get Instagram publishing limit
@@ -19890,6 +20092,7 @@ paths:
19890
20092
 
19891
20093
  /v1/accounts/{accountId}/instagram/stories/{storyId}/insights:
19892
20094
  get:
20095
+ x-resource-group: "analytics"
19893
20096
  operationId: getInstagramStoryInsights
19894
20097
  tags: [Instagram]
19895
20098
  summary: Get Instagram story insights
@@ -19959,6 +20162,7 @@ paths:
19959
20162
 
19960
20163
  /v1/accounts/{accountId}/pinterest-boards:
19961
20164
  get:
20165
+ x-resource-group: "accounts"
19962
20166
  operationId: getPinterestBoards
19963
20167
  tags: [Connect]
19964
20168
  summary: List Pinterest boards
@@ -19999,6 +20203,7 @@ paths:
19999
20203
  '401': { $ref: '#/components/responses/Unauthorized' }
20000
20204
  '404': { description: Account not found }
20001
20205
  put:
20206
+ x-resource-group: "accounts"
20002
20207
  operationId: updatePinterestBoards
20003
20208
  tags: [Connect]
20004
20209
  summary: Set default Pinterest board
@@ -20043,6 +20248,7 @@ paths:
20043
20248
  '401': { $ref: '#/components/responses/Unauthorized' }
20044
20249
  '404': { description: Account not found }
20045
20250
  post:
20251
+ x-resource-group: "accounts"
20046
20252
  operationId: createPinterestBoard
20047
20253
  tags: [Connect]
20048
20254
  summary: Create Pinterest board
@@ -20104,6 +20310,7 @@ paths:
20104
20310
 
20105
20311
  /v1/accounts/{accountId}/youtube-playlists:
20106
20312
  get:
20313
+ x-resource-group: "accounts"
20107
20314
  operationId: getYoutubePlaylists
20108
20315
  tags: [Connect]
20109
20316
  summary: List YouTube playlists
@@ -20153,6 +20360,7 @@ paths:
20153
20360
  '401': { $ref: '#/components/responses/Unauthorized' }
20154
20361
  '404': { description: Account not found }
20155
20362
  put:
20363
+ x-resource-group: "accounts"
20156
20364
  operationId: updateYoutubeDefaultPlaylist
20157
20365
  tags: [Connect]
20158
20366
  summary: Set default YouTube playlist
@@ -20192,6 +20400,7 @@ paths:
20192
20400
 
20193
20401
  /v1/accounts/{accountId}/gmb-locations:
20194
20402
  get:
20403
+ x-resource-group: "accounts"
20195
20404
  operationId: getGmbLocations
20196
20405
  tags: [Connect]
20197
20406
  summary: List GBP locations
@@ -20262,6 +20471,7 @@ paths:
20262
20471
  '401': { $ref: '#/components/responses/Unauthorized' }
20263
20472
  '404': { description: Account not found }
20264
20473
  put:
20474
+ x-resource-group: "accounts"
20265
20475
  operationId: updateGmbLocation
20266
20476
  tags: [Connect]
20267
20477
  summary: Update GBP location
@@ -20319,6 +20529,7 @@ paths:
20319
20529
 
20320
20530
  /v1/accounts/{accountId}/gmb-locations/assign:
20321
20531
  post:
20532
+ x-resource-group: "accounts"
20322
20533
  operationId: assignGoogleBusinessLocation
20323
20534
  tags: [Connect]
20324
20535
  summary: Assign GBP location to another profile
@@ -20400,6 +20611,7 @@ paths:
20400
20611
 
20401
20612
  /v1/accounts/{accountId}/facebook-post-reactions:
20402
20613
  get:
20614
+ x-resource-group: "analytics"
20403
20615
  operationId: getFacebookPostReactions
20404
20616
  tags: [Analytics]
20405
20617
  summary: Get Facebook post reactions
@@ -20462,6 +20674,7 @@ paths:
20462
20674
 
20463
20675
  /v1/accounts/{accountId}/reddit-subreddits:
20464
20676
  get:
20677
+ x-resource-group: "accounts"
20465
20678
  operationId: getRedditSubreddits
20466
20679
  tags: [Connect]
20467
20680
  summary: List Reddit subreddits
@@ -20510,6 +20723,7 @@ paths:
20510
20723
  '404': { description: Account not found }
20511
20724
 
20512
20725
  put:
20726
+ x-resource-group: "accounts"
20513
20727
  operationId: updateRedditSubreddits
20514
20728
  tags: [Connect]
20515
20729
  summary: Set default subreddit
@@ -20547,6 +20761,7 @@ paths:
20547
20761
 
20548
20762
  /v1/accounts/{accountId}/reddit-subreddits/{subreddit}/rules:
20549
20763
  get:
20764
+ x-resource-group: "accounts"
20550
20765
  operationId: getSubredditRules
20551
20766
  tags: [Connect]
20552
20767
  summary: Get subreddit rules
@@ -20609,6 +20824,7 @@ paths:
20609
20824
 
20610
20825
  /v1/accounts/{accountId}/reddit-vote:
20611
20826
  post:
20827
+ x-resource-group: "engagement"
20612
20828
  operationId: voteRedditThing
20613
20829
  tags: [Connect]
20614
20830
  summary: Vote on a Reddit post or comment
@@ -20664,6 +20880,7 @@ paths:
20664
20880
 
20665
20881
  /v1/accounts/{accountId}/reddit-flairs:
20666
20882
  get:
20883
+ x-resource-group: "accounts"
20667
20884
  operationId: getRedditFlairs
20668
20885
  tags: [Connect]
20669
20886
  summary: List subreddit flairs
@@ -20709,6 +20926,7 @@ paths:
20709
20926
  '401': { $ref: '#/components/responses/Unauthorized' }
20710
20927
  '404': { description: Account not found }
20711
20928
  post:
20929
+ x-resource-group: "accounts"
20712
20930
  operationId: setRedditPostFlair
20713
20931
  tags: [Connect]
20714
20932
  summary: Set Reddit post flair
@@ -20760,6 +20978,7 @@ paths:
20760
20978
 
20761
20979
  /v1/accounts/{accountId}/slack-settings:
20762
20980
  get:
20981
+ x-resource-group: "accounts"
20763
20982
  operationId: getSlackSettings
20764
20983
  tags: [Accounts]
20765
20984
  summary: Get Slack account settings
@@ -20794,6 +21013,7 @@ paths:
20794
21013
  '401': { $ref: '#/components/responses/Unauthorized' }
20795
21014
  '404': { description: Account not found }
20796
21015
  patch:
21016
+ x-resource-group: "accounts"
20797
21017
  operationId: updateSlackSettings
20798
21018
  tags: [Accounts]
20799
21019
  summary: Update Slack account settings
@@ -20821,6 +21041,7 @@ paths:
20821
21041
 
20822
21042
  /v1/accounts/{accountId}/discord-settings:
20823
21043
  get:
21044
+ x-resource-group: "accounts"
20824
21045
  operationId: getDiscordSettings
20825
21046
  tags: [Discord]
20826
21047
  summary: Get Discord account settings
@@ -20870,6 +21091,7 @@ paths:
20870
21091
  '404': { description: Account not found }
20871
21092
 
20872
21093
  patch:
21094
+ x-resource-group: "accounts"
20873
21095
  operationId: updateDiscordSettings
20874
21096
  tags: [Discord]
20875
21097
  summary: Update Discord settings
@@ -20939,6 +21161,7 @@ paths:
20939
21161
 
20940
21162
  /v1/accounts/{accountId}/discord-channels:
20941
21163
  get:
21164
+ x-resource-group: "accounts"
20942
21165
  operationId: getDiscordChannels
20943
21166
  tags: [Discord]
20944
21167
  summary: List Discord guild channels
@@ -20981,6 +21204,7 @@ paths:
20981
21204
 
20982
21205
  /v1/accounts/{accountId}/slack-members:
20983
21206
  get:
21207
+ x-resource-group: "contacts"
20984
21208
  operationId: listSlackMembers
20985
21209
  tags: [Slack]
20986
21210
  summary: List Slack workspace members
@@ -21028,6 +21252,7 @@ paths:
21028
21252
 
21029
21253
  /v1/discord/dms:
21030
21254
  post:
21255
+ x-resource-group: "messages"
21031
21256
  operationId: sendDiscordDirectMessage
21032
21257
  tags: [Discord]
21033
21258
  summary: Send a Discord Direct Message
@@ -21136,6 +21361,7 @@ paths:
21136
21361
 
21137
21362
  /v1/discord/guilds/{guildId}/roles:
21138
21363
  get:
21364
+ x-resource-group: "engagement"
21139
21365
  operationId: listDiscordGuildRoles
21140
21366
  tags: [Discord]
21141
21367
  summary: List Discord guild roles
@@ -21179,6 +21405,7 @@ paths:
21179
21405
  '403': { description: Discord refused the request (bot lacks View Channels permission in the guild). }
21180
21406
  '502': { description: Discord was unreachable or returned an unclassified error. }
21181
21407
  post:
21408
+ x-resource-group: "engagement"
21182
21409
  operationId: createDiscordGuildRole
21183
21410
  tags: [Discord]
21184
21411
  summary: Create a Discord guild role
@@ -21230,6 +21457,7 @@ paths:
21230
21457
 
21231
21458
  /v1/discord/guilds/{guildId}/roles/{roleId}:
21232
21459
  patch:
21460
+ x-resource-group: "engagement"
21233
21461
  operationId: editDiscordGuildRole
21234
21462
  tags: [Discord]
21235
21463
  summary: Edit a Discord guild role
@@ -21274,6 +21502,7 @@ paths:
21274
21502
  '403': { description: "Discord refused the action (bot lacks Manage Roles, or the target role sits at or above the bot's highest role)." }
21275
21503
  '502': { description: Discord was unreachable or returned an unclassified error. }
21276
21504
  delete:
21505
+ x-resource-group: "engagement"
21277
21506
  operationId: deleteDiscordGuildRole
21278
21507
  tags: [Discord]
21279
21508
  summary: Delete a Discord guild role
@@ -21305,6 +21534,7 @@ paths:
21305
21534
 
21306
21535
  /v1/discord/guilds/{guildId}/members:
21307
21536
  get:
21537
+ x-resource-group: "contacts"
21308
21538
  operationId: listDiscordGuildMembers
21309
21539
  tags: [Discord]
21310
21540
  summary: List Discord guild members
@@ -21344,6 +21574,7 @@ paths:
21344
21574
 
21345
21575
  /v1/discord/guilds/{guildId}/members/search:
21346
21576
  get:
21577
+ x-resource-group: "contacts"
21347
21578
  operationId: searchDiscordGuildMembers
21348
21579
  tags: [Discord]
21349
21580
  summary: Search Discord guild members
@@ -21375,6 +21606,7 @@ paths:
21375
21606
 
21376
21607
  /v1/discord/guilds/{guildId}/members/{userId}:
21377
21608
  get:
21609
+ x-resource-group: "contacts"
21378
21610
  operationId: getDiscordGuildMember
21379
21611
  tags: [Discord]
21380
21612
  summary: Get a Discord guild member
@@ -21402,6 +21634,7 @@ paths:
21402
21634
 
21403
21635
  /v1/discord/guilds/{guildId}/members/{userId}/roles/{roleId}:
21404
21636
  put:
21637
+ x-resource-group: "contacts"
21405
21638
  operationId: addDiscordMemberRole
21406
21639
  tags: [Discord]
21407
21640
  summary: Assign a role to a guild member
@@ -21440,6 +21673,7 @@ paths:
21440
21673
  '502': { description: Discord was unreachable or returned an unclassified error. }
21441
21674
 
21442
21675
  delete:
21676
+ x-resource-group: "contacts"
21443
21677
  operationId: removeDiscordMemberRole
21444
21678
  tags: [Discord]
21445
21679
  summary: Remove a role from a guild member
@@ -21474,6 +21708,7 @@ paths:
21474
21708
 
21475
21709
  /v1/discord/channels/{channelId}/messages/{messageId}:
21476
21710
  delete:
21711
+ x-resource-group: "engagement"
21477
21712
  operationId: deleteDiscordMessage
21478
21713
  tags: [Discord]
21479
21714
  summary: Delete a Discord channel message
@@ -21508,6 +21743,7 @@ paths:
21508
21743
 
21509
21744
  /v1/discord/channels/{channelId}/messages/{messageId}/crosspost:
21510
21745
  post:
21746
+ x-resource-group: "engagement"
21511
21747
  operationId: crosspostDiscordMessage
21512
21748
  tags: [Discord]
21513
21749
  summary: Crosspost Discord message
@@ -21541,6 +21777,7 @@ paths:
21541
21777
 
21542
21778
  /v1/discord/channels/{channelId}/threads:
21543
21779
  post:
21780
+ x-resource-group: "engagement"
21544
21781
  operationId: createDiscordThread
21545
21782
  tags: [Discord]
21546
21783
  summary: Create a Discord public thread
@@ -21595,6 +21832,7 @@ paths:
21595
21832
 
21596
21833
  /v1/discord/channels/{channelId}/pins:
21597
21834
  get:
21835
+ x-resource-group: "engagement"
21598
21836
  operationId: listDiscordPinnedMessages
21599
21837
  tags: [Discord]
21600
21838
  summary: List pinned messages
@@ -21636,6 +21874,7 @@ paths:
21636
21874
 
21637
21875
  /v1/discord/channels/{channelId}/pins/{messageId}:
21638
21876
  put:
21877
+ x-resource-group: "engagement"
21639
21878
  operationId: pinDiscordMessage
21640
21879
  tags: [Discord]
21641
21880
  summary: Pin a Discord message
@@ -21671,6 +21910,7 @@ paths:
21671
21910
  '502': { description: Bot lacks MANAGE_MESSAGES in the channel. }
21672
21911
 
21673
21912
  delete:
21913
+ x-resource-group: "engagement"
21674
21914
  operationId: unpinDiscordMessage
21675
21915
  tags: [Discord]
21676
21916
  summary: Unpin a Discord message
@@ -21700,6 +21940,7 @@ paths:
21700
21940
 
21701
21941
  /v1/discord/guilds/{guildId}/events:
21702
21942
  get:
21943
+ x-resource-group: "engagement"
21703
21944
  operationId: listDiscordScheduledEvents
21704
21945
  tags: [Discord]
21705
21946
  summary: List Discord scheduled events
@@ -21732,6 +21973,7 @@ paths:
21732
21973
  '502': { description: Bot lacks access to the guild's events. }
21733
21974
 
21734
21975
  post:
21976
+ x-resource-group: "engagement"
21735
21977
  operationId: createDiscordScheduledEvent
21736
21978
  tags: [Discord]
21737
21979
  summary: Create a Discord scheduled event
@@ -21816,6 +22058,7 @@ paths:
21816
22058
 
21817
22059
  /v1/discord/guilds/{guildId}/events/{eventId}:
21818
22060
  get:
22061
+ x-resource-group: "engagement"
21819
22062
  operationId: getDiscordScheduledEvent
21820
22063
  tags: [Discord]
21821
22064
  summary: Get a Discord scheduled event
@@ -21836,6 +22079,7 @@ paths:
21836
22079
  '404': { description: Event or Discord account not found. }
21837
22080
 
21838
22081
  patch:
22082
+ x-resource-group: "engagement"
21839
22083
  operationId: updateDiscordScheduledEvent
21840
22084
  tags: [Discord]
21841
22085
  summary: Update a Discord scheduled event
@@ -21884,6 +22128,7 @@ paths:
21884
22128
  '502': { description: Discord was unreachable or returned an unclassified error. }
21885
22129
 
21886
22130
  delete:
22131
+ x-resource-group: "engagement"
21887
22132
  operationId: deleteDiscordScheduledEvent
21888
22133
  tags: [Discord]
21889
22134
  summary: Delete a Discord scheduled event
@@ -21910,6 +22155,7 @@ paths:
21910
22155
 
21911
22156
  /v1/queue/slots:
21912
22157
  get:
22158
+ x-resource-group: "publishing"
21913
22159
  operationId: listQueueSlots
21914
22160
  tags: [Queue]
21915
22161
  summary: List schedules
@@ -21989,6 +22235,7 @@ paths:
21989
22235
  '401': { $ref: '#/components/responses/Unauthorized' }
21990
22236
  '404': { description: Profile not found }
21991
22237
  post:
22238
+ x-resource-group: "publishing"
21992
22239
  operationId: createQueueSlot
21993
22240
  tags: [Queue]
21994
22241
  summary: Create schedule
@@ -22041,6 +22288,7 @@ paths:
22041
22288
  '401': { $ref: '#/components/responses/Unauthorized' }
22042
22289
  '404': { description: Profile not found }
22043
22290
  put:
22291
+ x-resource-group: "publishing"
22044
22292
  operationId: updateQueueSlot
22045
22293
  tags: [Queue]
22046
22294
  summary: Update schedule
@@ -22113,6 +22361,7 @@ paths:
22113
22361
  '401': { $ref: '#/components/responses/Unauthorized' }
22114
22362
  '404': { description: Profile not found }
22115
22363
  delete:
22364
+ x-resource-group: "publishing"
22116
22365
  operationId: deleteQueueSlot
22117
22366
  tags: [Queue]
22118
22367
  summary: Delete schedule
@@ -22145,6 +22394,7 @@ paths:
22145
22394
  '404': { description: Profile or queue not found }
22146
22395
  /v1/queue/preview:
22147
22396
  get:
22397
+ x-resource-group: "publishing"
22148
22398
  operationId: previewQueue
22149
22399
  tags: [Queue]
22150
22400
  summary: Preview upcoming slots
@@ -22187,6 +22437,7 @@ paths:
22187
22437
  '404': { description: Profile or queue schedule not found }
22188
22438
  /v1/queue/next-slot:
22189
22439
  get:
22440
+ x-resource-group: "publishing"
22190
22441
  operationId: getNextQueueSlot
22191
22442
  tags: [Queue]
22192
22443
  summary: Get next available slot
@@ -22224,6 +22475,7 @@ paths:
22224
22475
  # ============================================
22225
22476
  /v1/webhooks/settings:
22226
22477
  get:
22478
+ x-resource-group: "webhooks"
22227
22479
  operationId: getWebhookSettings
22228
22480
  tags: [Webhooks]
22229
22481
  summary: List webhooks
@@ -22259,6 +22511,7 @@ paths:
22259
22511
  failureCount: 0
22260
22512
  '401': { $ref: '#/components/responses/Unauthorized' }
22261
22513
  post:
22514
+ x-resource-group: "webhooks"
22262
22515
  operationId: createWebhookSettings
22263
22516
  tags: [Webhooks]
22264
22517
  summary: Create webhook
@@ -22268,6 +22521,11 @@ paths:
22268
22521
  `name`, `url` and `events` are required. `url` must be a valid URL and `events` must contain at least one event. Whitespace is trimmed from `url` before validation.
22269
22522
 
22270
22523
  Webhooks are automatically disabled after 10 consecutive delivery failures.
22524
+
22525
+ A restricted (zrk_) API key can only subscribe to events whose resource group
22526
+ the key holds; an event outside the key's groups is rejected with 403. Note
22527
+ that the KEY cannot access private messages; the ACCOUNT's pre-existing
22528
+ webhook subscriptions are a separate grant surface.
22271
22529
  security:
22272
22530
  - bearerAuth: []
22273
22531
  requestBody:
@@ -22331,7 +22589,9 @@ paths:
22331
22589
  $ref: '#/components/schemas/Webhook'
22332
22590
  '400': { description: Validation error or maximum webhooks reached }
22333
22591
  '401': { $ref: '#/components/responses/Unauthorized' }
22592
+ '403': { $ref: '#/components/responses/ResourceGroupForbidden' }
22334
22593
  put:
22594
+ x-resource-group: "webhooks"
22335
22595
  operationId: updateWebhookSettings
22336
22596
  tags: [Webhooks]
22337
22597
  summary: Update webhook
@@ -22341,6 +22601,9 @@ paths:
22341
22601
  When provided, `name` must be 1-50 characters, `url` must be a valid URL, and `events` must contain at least one event. Whitespace is trimmed from `url` before validation.
22342
22602
 
22343
22603
  Webhooks are automatically disabled after 10 consecutive delivery failures.
22604
+
22605
+ A restricted (zrk_) API key can only set `events` to events whose resource
22606
+ group the key holds; an event outside the key's groups is rejected with 403.
22344
22607
  security:
22345
22608
  - bearerAuth: []
22346
22609
  requestBody:
@@ -22407,8 +22670,10 @@ paths:
22407
22670
  $ref: '#/components/schemas/Webhook'
22408
22671
  '400': { description: Validation error or missing webhook ID }
22409
22672
  '401': { $ref: '#/components/responses/Unauthorized' }
22673
+ '403': { $ref: '#/components/responses/ResourceGroupForbidden' }
22410
22674
  '404': { description: Webhook not found }
22411
22675
  delete:
22676
+ x-resource-group: "webhooks"
22412
22677
  operationId: deleteWebhookSettings
22413
22678
  tags: [Webhooks]
22414
22679
  summary: Delete webhook
@@ -22436,6 +22701,7 @@ paths:
22436
22701
 
22437
22702
  /v1/webhooks/logs:
22438
22703
  get:
22704
+ x-resource-group: "webhooks"
22439
22705
  operationId: getWebhookLogs
22440
22706
  tags: [Webhooks]
22441
22707
  summary: List webhook delivery logs
@@ -22443,6 +22709,10 @@ paths:
22443
22709
  Retrieve recorded webhook delivery attempts for the authenticated user, most recent first.
22444
22710
  Logs are retained for 30 days. Supports filtering by status, event type, webhook ID, and event ID,
22445
22711
  plus offset-based pagination.
22712
+
22713
+ For a restricted (zrk_) API key, rows for events outside the key's resource
22714
+ groups are omitted (`pagination.total` may over-count), and an `event` filter
22715
+ naming such an event is rejected with 403.
22446
22716
  security:
22447
22717
  - bearerAuth: []
22448
22718
  parameters:
@@ -22521,9 +22791,11 @@ paths:
22521
22791
  description: Whether more logs are available beyond this page
22522
22792
  '400': { description: Invalid query parameter }
22523
22793
  '401': { $ref: '#/components/responses/Unauthorized' }
22794
+ '403': { $ref: '#/components/responses/ResourceGroupForbidden' }
22524
22795
 
22525
22796
  /v1/webhooks/test:
22526
22797
  post:
22798
+ x-resource-group: "webhooks"
22527
22799
  operationId: testWebhook
22528
22800
  tags: [Webhooks]
22529
22801
  summary: Send test webhook
@@ -22576,6 +22848,7 @@ paths:
22576
22848
 
22577
22849
  /v1/logs:
22578
22850
  get:
22851
+ x-resource-group: "publishing"
22579
22852
  operationId: listLogs
22580
22853
  tags: [Logs]
22581
22854
  summary: List activity logs
@@ -22768,6 +23041,7 @@ paths:
22768
23041
  # Unified Inbox Endpoints
22769
23042
  /v1/inbox/conversations:
22770
23043
  get:
23044
+ x-resource-group: "messages"
22771
23045
  operationId: listInboxConversations
22772
23046
  summary: List conversations
22773
23047
  description: |
@@ -22973,6 +23247,7 @@ paths:
22973
23247
  '403':
22974
23248
  description: Inbox addon required
22975
23249
  post:
23250
+ x-resource-group: "messages"
22976
23251
  operationId: createInboxConversation
22977
23252
  summary: Create conversation
22978
23253
  description: |
@@ -23151,6 +23426,7 @@ paths:
23151
23426
  description: X API rate limit exceeded
23152
23427
  /v1/inbox/conversations/search:
23153
23428
  get:
23429
+ x-resource-group: "messages"
23154
23430
  operationId: searchInboxConversations
23155
23431
  summary: Search conversations
23156
23432
  description: |
@@ -23267,6 +23543,7 @@ paths:
23267
23543
  description: Inbox addon required
23268
23544
  /v1/inbox/conversations/{conversationId}:
23269
23545
  get:
23546
+ x-resource-group: "messages"
23270
23547
  operationId: getInboxConversation
23271
23548
  summary: Get conversation
23272
23549
  description: Retrieve details and metadata for a specific conversation. Requires accountId query parameter.
@@ -23403,6 +23680,7 @@ paths:
23403
23680
  '404':
23404
23681
  description: Conversation not found
23405
23682
  put:
23683
+ x-resource-group: "messages"
23406
23684
  operationId: updateInboxConversation
23407
23685
  summary: Update conversation status
23408
23686
  description: Archive or activate a conversation. Requires accountId in request body.
@@ -23449,6 +23727,7 @@ paths:
23449
23727
 
23450
23728
  /v1/inbox/conversations/{conversationId}/messages:
23451
23729
  get:
23730
+ x-resource-group: "messages"
23452
23731
  operationId: getInboxConversationMessages
23453
23732
  summary: List messages
23454
23733
  description: |
@@ -23645,6 +23924,7 @@ paths:
23645
23924
  '403':
23646
23925
  description: Inbox addon required
23647
23926
  post:
23927
+ x-resource-group: "messages"
23648
23928
  operationId: sendInboxMessage
23649
23929
  summary: Send message
23650
23930
  description: |
@@ -24202,6 +24482,7 @@ paths:
24202
24482
 
24203
24483
  /v1/whatsapp/media/{mediaId}:
24204
24484
  get:
24485
+ x-resource-group: "messages"
24205
24486
  operationId: getWhatsAppMedia
24206
24487
  tags: [WhatsApp]
24207
24488
  summary: Download WhatsApp media
@@ -24245,6 +24526,7 @@ paths:
24245
24526
 
24246
24527
  /v1/inbox/conversations/{conversationId}/messages/{messageId}:
24247
24528
  patch:
24529
+ x-resource-group: "messages"
24248
24530
  operationId: editInboxMessage
24249
24531
  summary: Edit message
24250
24532
  description: |
@@ -24307,6 +24589,7 @@ paths:
24307
24589
  '403':
24308
24590
  description: Inbox addon required
24309
24591
  delete:
24592
+ x-resource-group: "messages"
24310
24593
  operationId: deleteInboxMessage
24311
24594
  summary: Delete message
24312
24595
  description: |
@@ -24353,6 +24636,7 @@ paths:
24353
24636
 
24354
24637
  /v1/inbox/conversations/{conversationId}/typing:
24355
24638
  post:
24639
+ x-resource-group: "messages"
24356
24640
  operationId: sendTypingIndicator
24357
24641
  summary: Send typing indicator
24358
24642
  description: |
@@ -24399,6 +24683,7 @@ paths:
24399
24683
 
24400
24684
  /v1/inbox/conversations/{conversationId}/read:
24401
24685
  post:
24686
+ x-resource-group: "messages"
24402
24687
  operationId: markConversationRead
24403
24688
  summary: Mark a conversation as read
24404
24689
  description: |
@@ -24448,6 +24733,7 @@ paths:
24448
24733
 
24449
24734
  /v1/inbox/conversations/{conversationId}/messages/{messageId}/reactions:
24450
24735
  post:
24736
+ x-resource-group: "messages"
24451
24737
  operationId: addMessageReaction
24452
24738
  summary: Add reaction
24453
24739
  description: |
@@ -24495,6 +24781,7 @@ paths:
24495
24781
  '404':
24496
24782
  description: Account or conversation not found
24497
24783
  delete:
24784
+ x-resource-group: "messages"
24498
24785
  operationId: removeMessageReaction
24499
24786
  summary: Remove reaction
24500
24787
  description: |
@@ -24539,6 +24826,7 @@ paths:
24539
24826
 
24540
24827
  /v1/media/upload-direct:
24541
24828
  post:
24829
+ x-resource-group: "publishing"
24542
24830
  operationId: uploadMediaDirect
24543
24831
  summary: Upload media file
24544
24832
  description: |
@@ -24585,6 +24873,7 @@ paths:
24585
24873
 
24586
24874
  /v1/accounts/{accountId}/messenger-menu:
24587
24875
  get:
24876
+ x-resource-group: "accounts"
24588
24877
  operationId: getMessengerMenu
24589
24878
  summary: Get FB persistent menu
24590
24879
  description: Get the persistent menu configuration for a Facebook Messenger account.
@@ -24608,6 +24897,7 @@ paths:
24608
24897
  description: Not a Facebook account
24609
24898
  '401': { $ref: '#/components/responses/Unauthorized' }
24610
24899
  put:
24900
+ x-resource-group: "accounts"
24611
24901
  operationId: setMessengerMenu
24612
24902
  summary: Set FB persistent menu
24613
24903
  description: Set the persistent menu for a Facebook Messenger account. Max 3 top-level items, max 5 nested items.
@@ -24637,6 +24927,7 @@ paths:
24637
24927
  description: Invalid request
24638
24928
  '401': { $ref: '#/components/responses/Unauthorized' }
24639
24929
  delete:
24930
+ x-resource-group: "accounts"
24640
24931
  operationId: deleteMessengerMenu
24641
24932
  description: Removes the persistent menu from Facebook Messenger conversations for this account.
24642
24933
  summary: Delete FB persistent menu
@@ -24655,6 +24946,7 @@ paths:
24655
24946
 
24656
24947
  /v1/accounts/{accountId}/instagram-ice-breakers:
24657
24948
  get:
24949
+ x-resource-group: "accounts"
24658
24950
  operationId: getInstagramIceBreakers
24659
24951
  summary: Get IG ice breakers
24660
24952
  description: Get the ice breaker configuration for an Instagram account.
@@ -24678,6 +24970,7 @@ paths:
24678
24970
  description: Not an Instagram account
24679
24971
  '401': { $ref: '#/components/responses/Unauthorized' }
24680
24972
  put:
24973
+ x-resource-group: "accounts"
24681
24974
  operationId: setInstagramIceBreakers
24682
24975
  summary: Set IG ice breakers
24683
24976
  description: Set ice breakers for an Instagram account. Max 4 ice breakers, question max 80 chars.
@@ -24713,6 +25006,7 @@ paths:
24713
25006
  description: Invalid request
24714
25007
  '401': { $ref: '#/components/responses/Unauthorized' }
24715
25008
  delete:
25009
+ x-resource-group: "accounts"
24716
25010
  operationId: deleteInstagramIceBreakers
24717
25011
  description: Removes the ice breaker questions from an Instagram account's Messenger experience.
24718
25012
  summary: Delete IG ice breakers
@@ -24731,6 +25025,7 @@ paths:
24731
25025
 
24732
25026
  /v1/accounts/{accountId}/telegram-commands:
24733
25027
  get:
25028
+ x-resource-group: "accounts"
24734
25029
  operationId: getTelegramCommands
24735
25030
  summary: Get TG bot commands
24736
25031
  description: Get the bot commands configuration for a Telegram account.
@@ -24760,6 +25055,7 @@ paths:
24760
25055
  description: Not a Telegram account
24761
25056
  '401': { $ref: '#/components/responses/Unauthorized' }
24762
25057
  put:
25058
+ x-resource-group: "accounts"
24763
25059
  operationId: setTelegramCommands
24764
25060
  summary: Set TG bot commands
24765
25061
  description: Set bot commands for a Telegram account.
@@ -24794,6 +25090,7 @@ paths:
24794
25090
  description: Invalid request
24795
25091
  '401': { $ref: '#/components/responses/Unauthorized' }
24796
25092
  delete:
25093
+ x-resource-group: "accounts"
24797
25094
  operationId: deleteTelegramCommands
24798
25095
  description: Clears all bot commands configured for a Telegram bot account.
24799
25096
  summary: Delete TG bot commands
@@ -24812,6 +25109,7 @@ paths:
24812
25109
 
24813
25110
  /v1/inbox/comments:
24814
25111
  get:
25112
+ x-resource-group: "engagement"
24815
25113
  operationId: listInboxComments
24816
25114
  summary: List commented posts
24817
25115
  description: |
@@ -24924,6 +25222,7 @@ paths:
24924
25222
 
24925
25223
  /v1/inbox/comments/{postId}:
24926
25224
  get:
25225
+ x-resource-group: "engagement"
24927
25226
  operationId: getInboxPostComments
24928
25227
  summary: Get post comments
24929
25228
  description: Fetch comments for a specific post. Requires accountId query parameter.
@@ -25057,6 +25356,7 @@ paths:
25057
25356
  '502':
25058
25357
  description: 'Upstream platform error (code platform_api_error, type platform_error)'
25059
25358
  post:
25359
+ x-resource-group: "engagement"
25060
25360
  operationId: replyToInboxPost
25061
25361
  summary: Reply to comment
25062
25362
  description: Post a reply to a post or specific comment. Requires accountId in request body.
@@ -25110,6 +25410,7 @@ paths:
25110
25410
  '502':
25111
25411
  description: 'Upstream platform error (code platform_api_error, type platform_error)'
25112
25412
  delete:
25413
+ x-resource-group: "engagement"
25113
25414
  operationId: deleteInboxComment
25114
25415
  summary: Delete comment
25115
25416
  description: |
@@ -25161,6 +25462,7 @@ paths:
25161
25462
 
25162
25463
  /v1/inbox/comments/{postId}/{commentId}:
25163
25464
  patch:
25465
+ x-resource-group: "engagement"
25164
25466
  operationId: editInboxComment
25165
25467
  summary: Edit comment
25166
25468
  description: |
@@ -25220,6 +25522,7 @@ paths:
25220
25522
 
25221
25523
  /v1/inbox/comments/{postId}/{commentId}/moderation:
25222
25524
  post:
25525
+ x-resource-group: "engagement"
25223
25526
  operationId: setCommentModeration
25224
25527
  summary: Set comment moderation status
25225
25528
  description: |
@@ -25288,6 +25591,7 @@ paths:
25288
25591
 
25289
25592
  /v1/inbox/comments/{postId}/{commentId}/hide:
25290
25593
  post:
25594
+ x-resource-group: "engagement"
25291
25595
  operationId: hideInboxComment
25292
25596
  summary: Hide comment
25293
25597
  description: |
@@ -25332,6 +25636,7 @@ paths:
25332
25636
  '403':
25333
25637
  description: Inbox addon required
25334
25638
  delete:
25639
+ x-resource-group: "engagement"
25335
25640
  operationId: unhideInboxComment
25336
25641
  summary: Unhide comment
25337
25642
  description: |
@@ -25371,6 +25676,7 @@ paths:
25371
25676
 
25372
25677
  /v1/inbox/comments/{postId}/{commentId}/like:
25373
25678
  post:
25679
+ x-resource-group: "engagement"
25374
25680
  operationId: likeInboxComment
25375
25681
  summary: Like comment
25376
25682
  description: |
@@ -25416,6 +25722,7 @@ paths:
25416
25722
  '403':
25417
25723
  description: Inbox addon required
25418
25724
  delete:
25725
+ x-resource-group: "engagement"
25419
25726
  operationId: unlikeInboxComment
25420
25727
  summary: Unlike comment
25421
25728
  description: |
@@ -25460,6 +25767,7 @@ paths:
25460
25767
 
25461
25768
  /v1/inbox/comments/{postId}/{commentId}/private-reply:
25462
25769
  post:
25770
+ x-resource-group: "messages"
25463
25771
  operationId: sendPrivateReplyToComment
25464
25772
  summary: Send private reply
25465
25773
  description: |
@@ -25635,6 +25943,7 @@ paths:
25635
25943
 
25636
25944
  /v1/twitter/retweet:
25637
25945
  post:
25946
+ x-resource-group: "engagement"
25638
25947
  operationId: retweetPost
25639
25948
  summary: Retweet a post
25640
25949
  description: |
@@ -25669,6 +25978,7 @@ paths:
25669
25978
  '403': { description: 'X rejected the request (e.g. suspended account, missing OAuth scope)' }
25670
25979
  '404': { description: Account not found }
25671
25980
  delete:
25981
+ x-resource-group: "engagement"
25672
25982
  operationId: undoRetweet
25673
25983
  summary: Undo retweet
25674
25984
  description: |
@@ -25704,6 +26014,7 @@ paths:
25704
26014
 
25705
26015
  /v1/twitter/bookmark:
25706
26016
  post:
26017
+ x-resource-group: "engagement"
25707
26018
  operationId: bookmarkPost
25708
26019
  summary: Bookmark a tweet
25709
26020
  description: |
@@ -25739,6 +26050,7 @@ paths:
25739
26050
  '403': { description: 'X rejected the request (e.g. suspended account, missing OAuth scope)' }
25740
26051
  '404': { description: Account not found }
25741
26052
  delete:
26053
+ x-resource-group: "engagement"
25742
26054
  operationId: removeBookmark
25743
26055
  summary: Remove bookmark
25744
26056
  description: |
@@ -25774,6 +26086,7 @@ paths:
25774
26086
 
25775
26087
  /v1/twitter/follow:
25776
26088
  post:
26089
+ x-resource-group: "engagement"
25777
26090
  operationId: followUser
25778
26091
  summary: Follow a user
25779
26092
  description: |
@@ -25810,6 +26123,7 @@ paths:
25810
26123
  '403': { description: 'X rejected the request (e.g. suspended account, missing OAuth scope)' }
25811
26124
  '404': { description: Account not found }
25812
26125
  delete:
26126
+ x-resource-group: "engagement"
25813
26127
  operationId: unfollowUser
25814
26128
  summary: Unfollow a user
25815
26129
  description: |
@@ -25845,6 +26159,7 @@ paths:
25845
26159
 
25846
26160
  /v1/twitter/search:
25847
26161
  get:
26162
+ x-resource-group: "engagement"
25848
26163
  operationId: searchTweets
25849
26164
  summary: Search recent tweets
25850
26165
  description: |
@@ -25950,6 +26265,7 @@ paths:
25950
26265
 
25951
26266
  /v1/twitter/tweet:
25952
26267
  get:
26268
+ x-resource-group: "engagement"
25953
26269
  operationId: getTweet
25954
26270
  summary: Look up a tweet
25955
26271
  description: |
@@ -26014,6 +26330,7 @@ paths:
26014
26330
 
26015
26331
  /v1/inbox/mentions:
26016
26332
  get:
26333
+ x-resource-group: "engagement"
26017
26334
  operationId: listInboxMentions
26018
26335
  summary: List mentions
26019
26336
  description: |
@@ -26113,6 +26430,7 @@ paths:
26113
26430
 
26114
26431
  /v1/inbox/mentions/reply:
26115
26432
  post:
26433
+ x-resource-group: "engagement"
26116
26434
  operationId: replyToMention
26117
26435
  summary: Reply to a mention
26118
26436
  description: |
@@ -26175,6 +26493,7 @@ paths:
26175
26493
 
26176
26494
  /v1/inbox/reviews:
26177
26495
  get:
26496
+ x-resource-group: "engagement"
26178
26497
  operationId: listInboxReviews
26179
26498
  summary: List reviews
26180
26499
  description: |
@@ -26298,6 +26617,7 @@ paths:
26298
26617
 
26299
26618
  /v1/inbox/reviews/{reviewId}/reply:
26300
26619
  post:
26620
+ x-resource-group: "engagement"
26301
26621
  operationId: replyToInboxReview
26302
26622
  summary: Reply to review
26303
26623
  description: Post a reply to a review. Requires accountId in request body.
@@ -26339,6 +26659,7 @@ paths:
26339
26659
  '403':
26340
26660
  description: Inbox addon required
26341
26661
  delete:
26662
+ x-resource-group: "engagement"
26342
26663
  operationId: deleteInboxReviewReply
26343
26664
  summary: Delete review reply
26344
26665
  description: Delete a reply to a review (Google Business only). Requires accountId in request body.
@@ -26383,6 +26704,7 @@ paths:
26383
26704
 
26384
26705
  /v1/whatsapp/templates:
26385
26706
  get:
26707
+ x-resource-group: "accounts"
26386
26708
  operationId: getWhatsAppTemplates
26387
26709
  tags: [WhatsApp]
26388
26710
  summary: List templates
@@ -26425,6 +26747,7 @@ paths:
26425
26747
  '401': { $ref: '#/components/responses/Unauthorized' }
26426
26748
  '404': { description: WhatsApp account not found }
26427
26749
  post:
26750
+ x-resource-group: "accounts"
26428
26751
  operationId: createWhatsAppTemplate
26429
26752
  tags: [WhatsApp]
26430
26753
  summary: Create template
@@ -26563,6 +26886,7 @@ paths:
26563
26886
 
26564
26887
  /v1/whatsapp/templates/{templateName}:
26565
26888
  get:
26889
+ x-resource-group: "accounts"
26566
26890
  operationId: getWhatsAppTemplate
26567
26891
  tags: [WhatsApp]
26568
26892
  summary: Get template
@@ -26609,6 +26933,7 @@ paths:
26609
26933
  '404': { $ref: '#/components/responses/NotFound' }
26610
26934
  '502': { description: Meta rejected the request or was unreachable. Meta 4xx statuses are forwarded as-is. }
26611
26935
  patch:
26936
+ x-resource-group: "accounts"
26612
26937
  operationId: updateWhatsAppTemplate
26613
26938
  tags: [WhatsApp]
26614
26939
  summary: Update template
@@ -26674,6 +26999,7 @@ paths:
26674
26999
  '404': { $ref: '#/components/responses/NotFound' }
26675
27000
  '502': { description: Meta rejected the update or was unreachable. Meta 4xx statuses are forwarded as-is. }
26676
27001
  delete:
27002
+ x-resource-group: "accounts"
26677
27003
  operationId: deleteWhatsAppTemplate
26678
27004
  tags: [WhatsApp]
26679
27005
  summary: Delete template
@@ -26718,6 +27044,7 @@ paths:
26718
27044
 
26719
27045
  /v1/whatsapp/calling:
26720
27046
  get:
27047
+ x-resource-group: "accounts"
26721
27048
  operationId: getWhatsAppCallingConfig
26722
27049
  tags: [WhatsApp Calling]
26723
27050
  summary: Get calling config for an account
@@ -26765,6 +27092,7 @@ paths:
26765
27092
 
26766
27093
  /v1/whatsapp/phone-numbers/{id}/calling:
26767
27094
  post:
27095
+ x-resource-group: "telephony"
26768
27096
  operationId: enableWhatsAppCallingLegacy
26769
27097
  deprecated: true
26770
27098
  tags: [WhatsApp Calling]
@@ -26820,6 +27148,7 @@ paths:
26820
27148
  '404': { description: WhatsApp phone number not found }
26821
27149
  '422': { description: "Not eligible to enable calling: not on usage-based billing, or the number's messaging limit is below Meta's ~2,000-daily-recipient threshold (TIER_250). Warm the number up to raise the limit." }
26822
27150
  patch:
27151
+ x-resource-group: "telephony"
26823
27152
  operationId: updateWhatsAppCallingLegacy
26824
27153
  deprecated: true
26825
27154
  tags: [WhatsApp Calling]
@@ -26862,6 +27191,7 @@ paths:
26862
27191
  '404': { description: WhatsApp phone number not found }
26863
27192
  '422': { description: Calling must be enabled before settings can be updated }
26864
27193
  delete:
27194
+ x-resource-group: "telephony"
26865
27195
  operationId: disableWhatsAppCallingLegacy
26866
27196
  deprecated: true
26867
27197
  tags: [WhatsApp Calling]
@@ -26886,6 +27216,7 @@ paths:
26886
27216
 
26887
27217
  /v1/whatsapp/call-permissions:
26888
27218
  get:
27219
+ x-resource-group: "contacts"
26889
27220
  operationId: getWhatsAppCallPermissions
26890
27221
  tags: [WhatsApp Calling]
26891
27222
  summary: Check call permission
@@ -26924,6 +27255,7 @@ paths:
26924
27255
 
26925
27256
  /v1/whatsapp/calls:
26926
27257
  post:
27258
+ x-resource-group: "messages"
26927
27259
  operationId: initiateWhatsAppCall
26928
27260
  tags: [WhatsApp Calling]
26929
27261
  summary: Initiate outbound call
@@ -26999,6 +27331,7 @@ paths:
26999
27331
  '422': { description: "Calling not enabled, BIC country blocked, or missing Meta SIP credentials" }
27000
27332
  '502': { description: Telnyx-side originate failed; the Call doc has been marked failed. }
27001
27333
  get:
27334
+ x-resource-group: "messages"
27002
27335
  operationId: listWhatsAppCalls
27003
27336
  tags: [WhatsApp Calling]
27004
27337
  summary: List call history for an account
@@ -27057,6 +27390,7 @@ paths:
27057
27390
 
27058
27391
  /v1/whatsapp/calls/{id}:
27059
27392
  get:
27393
+ x-resource-group: "messages"
27060
27394
  operationId: getWhatsAppCall
27061
27395
  tags: [WhatsApp Calling]
27062
27396
  summary: Get a single call
@@ -27080,6 +27414,7 @@ paths:
27080
27414
 
27081
27415
  /v1/whatsapp/calls/{id}/recording:
27082
27416
  get:
27417
+ x-resource-group: "messages"
27083
27418
  operationId: getWhatsAppCallRecording
27084
27419
  tags: [WhatsApp Calling]
27085
27420
  summary: Get a call recording
@@ -27112,6 +27447,7 @@ paths:
27112
27447
 
27113
27448
  /v1/whatsapp/calls/estimate:
27114
27449
  get:
27450
+ x-resource-group: "messages"
27115
27451
  operationId: getWhatsAppCallEstimate
27116
27452
  tags: [WhatsApp Calling]
27117
27453
  summary: Estimate per-minute cost
@@ -27149,6 +27485,7 @@ paths:
27149
27485
 
27150
27486
  /v1/calls:
27151
27487
  get:
27488
+ x-resource-group: "messages"
27152
27489
  operationId: listCalls
27153
27490
  tags: [Calls]
27154
27491
  summary: List all calls (unified history)
@@ -27198,6 +27535,7 @@ paths:
27198
27535
 
27199
27536
  /v1/calls/{id}:
27200
27537
  get:
27538
+ x-resource-group: "messages"
27201
27539
  operationId: getCall
27202
27540
  tags: [Calls]
27203
27541
  summary: Get a call (any channel)
@@ -27232,6 +27570,7 @@ paths:
27232
27570
 
27233
27571
  /v1/calls/{id}/recording:
27234
27572
  get:
27573
+ x-resource-group: "messages"
27235
27574
  operationId: getCallRecording
27236
27575
  tags: [Calls]
27237
27576
  summary: Get a call recording
@@ -27264,6 +27603,7 @@ paths:
27264
27603
 
27265
27604
  /v1/voice/calls:
27266
27605
  post:
27606
+ x-resource-group: "messages"
27267
27607
  operationId: createVoiceCall
27268
27608
  tags: [Voice]
27269
27609
  summary: Place an outbound phone call
@@ -27327,6 +27667,7 @@ paths:
27327
27667
  '429': { description: Outbound call limit reached (per rolling hour). }
27328
27668
  '502': { description: Carrier-side originate failed; the call has been marked failed. }
27329
27669
  get:
27670
+ x-resource-group: "messages"
27330
27671
  operationId: listVoiceCalls
27331
27672
  tags: [Voice]
27332
27673
  summary: List phone calls
@@ -27360,6 +27701,7 @@ paths:
27360
27701
 
27361
27702
  /v1/voice/calls/{id}:
27362
27703
  get:
27704
+ x-resource-group: "messages"
27363
27705
  operationId: getVoiceCall
27364
27706
  tags: [Voice]
27365
27707
  summary: Get a phone call
@@ -27383,6 +27725,7 @@ paths:
27383
27725
 
27384
27726
  /v1/voice/calls/{id}/end:
27385
27727
  post:
27728
+ x-resource-group: "messages"
27386
27729
  operationId: endVoiceCall
27387
27730
  tags: [Voice]
27388
27731
  summary: Hang up a live call
@@ -27412,6 +27755,7 @@ paths:
27412
27755
 
27413
27756
  /v1/voice/calls/{id}/recording:
27414
27757
  get:
27758
+ x-resource-group: "messages"
27415
27759
  operationId: getVoiceCallRecording
27416
27760
  tags: [Voice]
27417
27761
  summary: Get a call recording
@@ -27441,6 +27785,7 @@ paths:
27441
27785
 
27442
27786
  /v1/voice/calls/{id}/transfer:
27443
27787
  post:
27788
+ x-resource-group: "messages"
27444
27789
  operationId: transferVoiceCall
27445
27790
  tags: [Voice]
27446
27791
  summary: Blind-transfer a live call
@@ -27479,6 +27824,7 @@ paths:
27479
27824
 
27480
27825
  /v1/voice/calls/estimate:
27481
27826
  get:
27827
+ x-resource-group: "messages"
27482
27828
  operationId: getVoiceCallEstimate
27483
27829
  tags: [Voice]
27484
27830
  summary: Estimate call cost
@@ -27522,6 +27868,7 @@ paths:
27522
27868
 
27523
27869
  /v1/voice/calls/web:
27524
27870
  post:
27871
+ x-resource-group: "messages"
27525
27872
  operationId: createVoiceWebSession
27526
27873
  tags: [Voice]
27527
27874
  summary: Mint a browser softphone session
@@ -27553,6 +27900,7 @@ paths:
27553
27900
 
27554
27901
  /v1/voice/calls/web/dial:
27555
27902
  post:
27903
+ x-resource-group: "messages"
27556
27904
  operationId: dialVoiceWebCall
27557
27905
  tags: [Voice]
27558
27906
  summary: Dial from the browser softphone
@@ -27599,6 +27947,7 @@ paths:
27599
27947
 
27600
27948
  /v1/sms/messages:
27601
27949
  post:
27950
+ x-resource-group: "messages"
27602
27951
  operationId: sendSms
27603
27952
  tags: [SMS]
27604
27953
  summary: Send an SMS/MMS
@@ -27658,6 +28007,7 @@ paths:
27658
28007
 
27659
28008
  /v1/sms/lookup:
27660
28009
  get:
28010
+ x-resource-group: "telephony"
27661
28011
  operationId: lookupSmsNumber
27662
28012
  tags: [SMS]
27663
28013
  summary: Look up carrier + line type
@@ -27688,6 +28038,7 @@ paths:
27688
28038
 
27689
28039
  /v1/sms/opt-outs:
27690
28040
  get:
28041
+ x-resource-group: "contacts"
27691
28042
  operationId: listSmsOptOuts
27692
28043
  tags: [SMS]
27693
28044
  summary: List SMS opt-outs
@@ -27725,6 +28076,7 @@ paths:
27725
28076
 
27726
28077
  /v1/sms/sender-ids:
27727
28078
  post:
28079
+ x-resource-group: "telephony"
27728
28080
  operationId: createSmsSenderId
27729
28081
  tags: [SMS]
27730
28082
  summary: Create an alphanumeric sender ID
@@ -27772,6 +28124,7 @@ paths:
27772
28124
  '403': { description: 'Workspace is not on usage-based billing, or already holds the maximum of 1,000 active sender IDs (code `sender_id_limit_reached`; raisable via support).' }
27773
28125
  '422': { description: 'Sender ID rejected: it appears to impersonate a protected brand or institution.' }
27774
28126
  get:
28127
+ x-resource-group: "telephony"
27775
28128
  operationId: listSmsSenderIds
27776
28129
  tags: [SMS]
27777
28130
  summary: List alphanumeric sender IDs
@@ -27812,6 +28165,7 @@ paths:
27812
28165
 
27813
28166
  /v1/sms/sender-ids/limit-request:
27814
28167
  post:
28168
+ x-resource-group: "telephony"
27815
28169
  operationId: requestSmsSenderIdLimitIncrease
27816
28170
  tags: [SMS]
27817
28171
  summary: Request a higher sender ID daily limit
@@ -27848,6 +28202,7 @@ paths:
27848
28202
 
27849
28203
  /v1/sms/sender-ids/{id}:
27850
28204
  delete:
28205
+ x-resource-group: "telephony"
27851
28206
  operationId: deleteSmsSenderId
27852
28207
  tags: [SMS]
27853
28208
  summary: Delete an alphanumeric sender ID
@@ -27873,6 +28228,7 @@ paths:
27873
28228
 
27874
28229
  /v1/sms/registrations:
27875
28230
  post:
28231
+ x-resource-group: "telephony"
27876
28232
  operationId: startSmsRegistration
27877
28233
  tags: [SMS]
27878
28234
  summary: Start a carrier registration
@@ -28022,6 +28378,7 @@ paths:
28022
28378
  '401': { $ref: '#/components/responses/Unauthorized' }
28023
28379
  '422': { description: Carrier registry rejected a field; `param` names it when known. }
28024
28380
  get:
28381
+ x-resource-group: "telephony"
28025
28382
  operationId: listSmsRegistrations
28026
28383
  tags: [SMS]
28027
28384
  summary: List carrier registrations
@@ -28071,6 +28428,7 @@ paths:
28071
28428
 
28072
28429
  /v1/sms/registrations/preflight:
28073
28430
  post:
28431
+ x-resource-group: "telephony"
28074
28432
  operationId: preflightSmsRegistration
28075
28433
  tags: [SMS]
28076
28434
  summary: Pre-check a carrier registration
@@ -28125,6 +28483,7 @@ paths:
28125
28483
  '401': { $ref: '#/components/responses/Unauthorized' }
28126
28484
  /v1/sms/registrations/{id}:
28127
28485
  delete:
28486
+ x-resource-group: "telephony"
28128
28487
  operationId: deactivateSmsRegistration
28129
28488
  tags: [SMS]
28130
28489
  summary: Deactivate a brand/campaign registration
@@ -28153,6 +28512,7 @@ paths:
28153
28512
  '401': { $ref: '#/components/responses/Unauthorized' }
28154
28513
  '404': { description: Registration not found }
28155
28514
  get:
28515
+ x-resource-group: "telephony"
28156
28516
  operationId: getSmsRegistration
28157
28517
  tags: [SMS]
28158
28518
  summary: Get a carrier registration
@@ -28193,6 +28553,7 @@ paths:
28193
28553
 
28194
28554
  /v1/sms/registrations/{id}/verify-otp:
28195
28555
  post:
28556
+ x-resource-group: "telephony"
28196
28557
  operationId: verifySmsRegistrationOtp
28197
28558
  tags: [SMS]
28198
28559
  summary: Submit the sole-prop OTP
@@ -28228,6 +28589,7 @@ paths:
28228
28589
 
28229
28590
  /v1/sms/registrations/{id}/resend-otp:
28230
28591
  post:
28592
+ x-resource-group: "telephony"
28231
28593
  operationId: resendSmsRegistrationOtp
28232
28594
  tags: [SMS]
28233
28595
  summary: Re-send the sole-prop OTP
@@ -28256,6 +28618,7 @@ paths:
28256
28618
 
28257
28619
  /v1/sms/registrations/{id}/appeal:
28258
28620
  post:
28621
+ x-resource-group: "telephony"
28259
28622
  operationId: appealSmsRegistration
28260
28623
  tags: [SMS]
28261
28624
  summary: Appeal a rejected campaign
@@ -28302,6 +28665,7 @@ paths:
28302
28665
 
28303
28666
  /v1/sms/registrations/{id}/respond:
28304
28667
  post:
28668
+ x-resource-group: "telephony"
28305
28669
  operationId: respondToSmsRegistrationReview
28306
28670
  tags: [SMS]
28307
28671
  summary: Reply to a change request
@@ -28346,6 +28710,7 @@ paths:
28346
28710
 
28347
28711
  /v1/sms/opt-in-proof:
28348
28712
  post:
28713
+ x-resource-group: "contacts"
28349
28714
  operationId: uploadSmsOptInProofFile
28350
28715
  tags: [SMS]
28351
28716
  summary: Upload opt-in form proof
@@ -28381,6 +28746,7 @@ paths:
28381
28746
 
28382
28747
  /v1/sms/registrations/{id}/opt-in-proof:
28383
28748
  post:
28749
+ x-resource-group: "contacts"
28384
28750
  operationId: uploadSmsOptInProof
28385
28751
  tags: [SMS]
28386
28752
  summary: Upload opt-in form proof for an appeal
@@ -28419,6 +28785,7 @@ paths:
28419
28785
 
28420
28786
  /v1/sms/registrations/share:
28421
28787
  post:
28788
+ x-resource-group: "telephony"
28422
28789
  operationId: shareSmsRegistration
28423
28790
  tags: [SMS]
28424
28791
  summary: Create a registration share link
@@ -28454,6 +28821,7 @@ paths:
28454
28821
 
28455
28822
  /v1/whatsapp/template-library:
28456
28823
  get:
28824
+ x-resource-group: "accounts"
28457
28825
  operationId: getWhatsAppLibraryTemplate
28458
28826
  tags: [WhatsApp Templates]
28459
28827
  summary: Look up a library template
@@ -28501,6 +28869,7 @@ paths:
28501
28869
 
28502
28870
  /v1/whatsapp/business-profile:
28503
28871
  get:
28872
+ x-resource-group: "accounts"
28504
28873
  operationId: getWhatsAppBusinessProfile
28505
28874
  tags: [WhatsApp]
28506
28875
  summary: Get business profile
@@ -28541,6 +28910,7 @@ paths:
28541
28910
  '401': { $ref: '#/components/responses/Unauthorized' }
28542
28911
  '404': { description: WhatsApp account not found }
28543
28912
  post:
28913
+ x-resource-group: "accounts"
28544
28914
  operationId: updateWhatsAppBusinessProfile
28545
28915
  tags: [WhatsApp]
28546
28916
  summary: Update business profile
@@ -28612,6 +28982,7 @@ paths:
28612
28982
 
28613
28983
  /v1/whatsapp/business-profile/photo:
28614
28984
  post:
28985
+ x-resource-group: "accounts"
28615
28986
  operationId: uploadWhatsAppProfilePhoto
28616
28987
  tags: [WhatsApp]
28617
28988
  summary: Upload profile picture
@@ -28670,6 +29041,7 @@ paths:
28670
29041
 
28671
29042
  /v1/whatsapp/business-profile/display-name:
28672
29043
  get:
29044
+ x-resource-group: "accounts"
28673
29045
  operationId: getWhatsAppDisplayName
28674
29046
  tags: [WhatsApp]
28675
29047
  summary: Get display name status
@@ -28707,6 +29079,7 @@ paths:
28707
29079
  '401': { $ref: '#/components/responses/Unauthorized' }
28708
29080
  '404': { description: WhatsApp account not found or accountId is not a valid ObjectId }
28709
29081
  post:
29082
+ x-resource-group: "accounts"
28710
29083
  operationId: updateWhatsAppDisplayName
28711
29084
  tags: [WhatsApp]
28712
29085
  summary: Request display name change
@@ -28756,6 +29129,7 @@ paths:
28756
29129
 
28757
29130
  /v1/whatsapp/business-profile/username:
28758
29131
  get:
29132
+ x-resource-group: "accounts"
28759
29133
  operationId: getWhatsappBusinessUsername
28760
29134
  tags: [WhatsApp]
28761
29135
  summary: Get business username
@@ -28790,6 +29164,7 @@ paths:
28790
29164
  '401': { $ref: '#/components/responses/Unauthorized' }
28791
29165
  '404': { description: WhatsApp account not found }
28792
29166
  post:
29167
+ x-resource-group: "accounts"
28793
29168
  operationId: setWhatsappBusinessUsername
28794
29169
  tags: [WhatsApp]
28795
29170
  summary: Set business username
@@ -28855,6 +29230,7 @@ paths:
28855
29230
  '401': { $ref: '#/components/responses/Unauthorized' }
28856
29231
  '404': { description: WhatsApp account not found }
28857
29232
  delete:
29233
+ x-resource-group: "accounts"
28858
29234
  operationId: deleteWhatsappBusinessUsername
28859
29235
  tags: [WhatsApp]
28860
29236
  summary: Delete business username
@@ -28892,6 +29268,7 @@ paths:
28892
29268
 
28893
29269
  /v1/whatsapp/business-profile/username/suggestions:
28894
29270
  get:
29271
+ x-resource-group: "accounts"
28895
29272
  operationId: getWhatsappBusinessUsernameSuggestions
28896
29273
  tags: [WhatsApp]
28897
29274
  summary: Get username suggestions
@@ -28928,6 +29305,7 @@ paths:
28928
29305
 
28929
29306
  /v1/whatsapp/number-info:
28930
29307
  get:
29308
+ x-resource-group: "contacts"
28931
29309
  operationId: getWhatsAppNumberInfo
28932
29310
  tags: [WhatsApp Phone Numbers]
28933
29311
  summary: Get number status
@@ -28976,6 +29354,7 @@ paths:
28976
29354
 
28977
29355
  /v1/whatsapp/block-users/status:
28978
29356
  get:
29357
+ x-resource-group: "contacts"
28979
29358
  operationId: getWhatsAppBlockStatus
28980
29359
  tags: [WhatsApp]
28981
29360
  summary: Check if a user is blocked
@@ -29004,6 +29383,7 @@ paths:
29004
29383
 
29005
29384
  /v1/whatsapp/block-users:
29006
29385
  get:
29386
+ x-resource-group: "contacts"
29007
29387
  operationId: getWhatsAppBlockedUsers
29008
29388
  tags: [WhatsApp]
29009
29389
  summary: List blocked users
@@ -29035,6 +29415,7 @@ paths:
29035
29415
  '401': { $ref: '#/components/responses/Unauthorized' }
29036
29416
  '404': { description: WhatsApp account not found }
29037
29417
  post:
29418
+ x-resource-group: "contacts"
29038
29419
  operationId: blockWhatsAppUsers
29039
29420
  tags: [WhatsApp]
29040
29421
  summary: Block users
@@ -29093,6 +29474,7 @@ paths:
29093
29474
  '401': { $ref: '#/components/responses/Unauthorized' }
29094
29475
  '404': { description: WhatsApp account not found }
29095
29476
  delete:
29477
+ x-resource-group: "contacts"
29096
29478
  operationId: unblockWhatsAppUsers
29097
29479
  tags: [WhatsApp]
29098
29480
  summary: Unblock users
@@ -29146,6 +29528,7 @@ paths:
29146
29528
 
29147
29529
  /v1/whatsapp/dataset:
29148
29530
  get:
29531
+ x-resource-group: "accounts"
29149
29532
  operationId: getWhatsAppDataset
29150
29533
  tags: [WhatsApp]
29151
29534
  summary: Get CTWA conversions dataset
@@ -29173,6 +29556,7 @@ paths:
29173
29556
  '401': { $ref: '#/components/responses/Unauthorized' }
29174
29557
  '404': { description: WhatsApp account not found }
29175
29558
  post:
29559
+ x-resource-group: "accounts"
29176
29560
  operationId: createWhatsAppDataset
29177
29561
  tags: [WhatsApp]
29178
29562
  summary: Provision CTWA dataset
@@ -29234,6 +29618,7 @@ paths:
29234
29618
 
29235
29619
  /v1/phone-numbers:
29236
29620
  get:
29621
+ x-resource-group: "telephony"
29237
29622
  operationId: listPhoneNumbers
29238
29623
  tags: [Phone Numbers]
29239
29624
  summary: List phone numbers
@@ -29333,6 +29718,7 @@ paths:
29333
29718
 
29334
29719
  /v1/phone-numbers/{id}:
29335
29720
  get:
29721
+ x-resource-group: "telephony"
29336
29722
  operationId: getPhoneNumber
29337
29723
  tags: [Phone Numbers]
29338
29724
  summary: Get phone number
@@ -29378,6 +29764,7 @@ paths:
29378
29764
  '401': { $ref: '#/components/responses/Unauthorized' }
29379
29765
  '404': { $ref: '#/components/responses/NotFound' }
29380
29766
  delete:
29767
+ x-resource-group: "telephony"
29381
29768
  operationId: releasePhoneNumber
29382
29769
  tags: [Phone Numbers]
29383
29770
  summary: Release phone number
@@ -29418,6 +29805,7 @@ paths:
29418
29805
 
29419
29806
  /v1/phone-numbers/purchase:
29420
29807
  post:
29808
+ x-resource-group: "telephony"
29421
29809
  operationId: purchasePhoneNumber
29422
29810
  tags: [Phone Numbers]
29423
29811
  summary: Purchase phone number
@@ -29603,6 +29991,7 @@ paths:
29603
29991
 
29604
29992
  /v1/phone-numbers/countries:
29605
29993
  get:
29994
+ x-resource-group: "telephony"
29606
29995
  operationId: listPhoneNumberCountries
29607
29996
  tags: [Phone Numbers]
29608
29997
  summary: List offerable number countries
@@ -29659,6 +30048,7 @@ paths:
29659
30048
 
29660
30049
  /v1/phone-numbers/available:
29661
30050
  get:
30051
+ x-resource-group: "telephony"
29662
30052
  operationId: searchAvailablePhoneNumbers
29663
30053
  tags: [Phone Numbers]
29664
30054
  summary: Search available numbers
@@ -29701,6 +30091,7 @@ paths:
29701
30091
 
29702
30092
  /v1/phone-numbers/availability:
29703
30093
  get:
30094
+ x-resource-group: "telephony"
29704
30095
  operationId: checkPhoneNumberAvailability
29705
30096
  tags: [Phone Numbers]
29706
30097
  summary: Check country availability
@@ -29762,6 +30153,7 @@ paths:
29762
30153
 
29763
30154
  /v1/whatsapp/phone-numbers:
29764
30155
  get:
30156
+ x-resource-group: "telephony"
29765
30157
  operationId: getWhatsAppPhoneNumbers
29766
30158
  deprecated: true
29767
30159
  tags: [WhatsApp Phone Numbers]
@@ -29866,6 +30258,7 @@ paths:
29866
30258
 
29867
30259
  /v1/whatsapp/phone-numbers/purchase:
29868
30260
  post:
30261
+ x-resource-group: "telephony"
29869
30262
  operationId: purchaseWhatsAppPhoneNumber
29870
30263
  deprecated: true
29871
30264
  tags: [WhatsApp Phone Numbers]
@@ -29993,6 +30386,7 @@ paths:
29993
30386
 
29994
30387
  /v1/whatsapp/phone-numbers/countries:
29995
30388
  get:
30389
+ x-resource-group: "telephony"
29996
30390
  operationId: listWhatsAppNumberCountries
29997
30391
  deprecated: true
29998
30392
  tags: [WhatsApp Phone Numbers]
@@ -30029,6 +30423,7 @@ paths:
30029
30423
 
30030
30424
  /v1/whatsapp/phone-numbers/available:
30031
30425
  get:
30426
+ x-resource-group: "telephony"
30032
30427
  operationId: searchAvailableWhatsAppNumbers
30033
30428
  deprecated: true
30034
30429
  tags: [WhatsApp Phone Numbers]
@@ -30070,6 +30465,7 @@ paths:
30070
30465
 
30071
30466
  /v1/whatsapp/phone-numbers/availability:
30072
30467
  get:
30468
+ x-resource-group: "telephony"
30073
30469
  operationId: checkWhatsAppNumberAvailability
30074
30470
  deprecated: true
30075
30471
  tags: [WhatsApp Phone Numbers]
@@ -30135,6 +30531,7 @@ paths:
30135
30531
 
30136
30532
  /v1/phone-numbers/kyc:
30137
30533
  get:
30534
+ x-resource-group: "telephony"
30138
30535
  operationId: getPhoneNumberKycForm
30139
30536
  tags: [Phone Numbers]
30140
30537
  summary: Get KYC form spec
@@ -30202,6 +30599,7 @@ paths:
30202
30599
  '400': { description: Country not available }
30203
30600
  '401': { $ref: '#/components/responses/Unauthorized' }
30204
30601
  post:
30602
+ x-resource-group: "telephony"
30205
30603
  operationId: submitPhoneNumberKyc
30206
30604
  tags: [Phone Numbers]
30207
30605
  summary: Submit KYC
@@ -30307,6 +30705,7 @@ paths:
30307
30705
 
30308
30706
  /v1/phone-numbers/kyc/document/{documentId}:
30309
30707
  get:
30708
+ x-resource-group: "telephony"
30310
30709
  operationId: viewPhoneNumberKycDocument
30311
30710
  tags: [Phone Numbers]
30312
30711
  summary: View a KYC document on file
@@ -30335,6 +30734,7 @@ paths:
30335
30734
 
30336
30735
  /v1/phone-numbers/kyc/upload-document:
30337
30736
  post:
30737
+ x-resource-group: "telephony"
30338
30738
  operationId: uploadPhoneNumberKycDocument
30339
30739
  tags: [Phone Numbers]
30340
30740
  summary: Upload a KYC document
@@ -30368,6 +30768,7 @@ paths:
30368
30768
 
30369
30769
  /v1/phone-numbers/kyc/validate-address:
30370
30770
  post:
30771
+ x-resource-group: "telephony"
30371
30772
  operationId: validatePhoneNumberKycAddress
30372
30773
  tags: [Phone Numbers]
30373
30774
  summary: Pre-validate KYC address
@@ -30437,6 +30838,7 @@ paths:
30437
30838
 
30438
30839
  /v1/phone-numbers/kyc/share:
30439
30840
  post:
30841
+ x-resource-group: "telephony"
30440
30842
  operationId: createPhoneNumberKycLink
30441
30843
  tags: [Phone Numbers]
30442
30844
  summary: Create a hosted KYC link
@@ -30497,6 +30899,7 @@ paths:
30497
30899
 
30498
30900
  /v1/phone-numbers/port-in:
30499
30901
  post:
30902
+ x-resource-group: "telephony"
30500
30903
  operationId: createPhoneNumberPortIn
30501
30904
  tags: [Phone Numbers]
30502
30905
  summary: Port numbers in
@@ -30608,6 +31011,7 @@ paths:
30608
31011
  '409': { description: "A number is already provisioned, or already in an in-flight port" }
30609
31012
  '422': { description: "A number is not portable (reason included), numbers span multiple non-US/CA countries, or every split order failed to submit" }
30610
31013
  get:
31014
+ x-resource-group: "telephony"
30611
31015
  operationId: listPhoneNumberPortIns
30612
31016
  tags: [Phone Numbers]
30613
31017
  summary: List port-in orders
@@ -30644,6 +31048,7 @@ paths:
30644
31048
 
30645
31049
  /v1/phone-numbers/port-in/check:
30646
31050
  post:
31051
+ x-resource-group: "telephony"
30647
31052
  operationId: checkPhoneNumberPortability
30648
31053
  tags: [Phone Numbers]
30649
31054
  summary: Check portability
@@ -30692,6 +31097,7 @@ paths:
30692
31097
 
30693
31098
  /v1/phone-numbers/port-in/documents:
30694
31099
  post:
31100
+ x-resource-group: "telephony"
30695
31101
  operationId: uploadPhoneNumberPortInDocument
30696
31102
  tags: [Phone Numbers]
30697
31103
  summary: Upload a porting document
@@ -30729,6 +31135,7 @@ paths:
30729
31135
 
30730
31136
  /v1/phone-numbers/port-in/requirements:
30731
31137
  get:
31138
+ x-resource-group: "telephony"
30732
31139
  operationId: getPhoneNumberPortInRequirements
30733
31140
  tags: [Phone Numbers]
30734
31141
  summary: Country porting requirements
@@ -30772,6 +31179,7 @@ paths:
30772
31179
 
30773
31180
  /v1/phone-numbers/port-in/{id}/requirements:
30774
31181
  get:
31182
+ x-resource-group: "telephony"
30775
31183
  operationId: getPhoneNumberPortInOrderRequirements
30776
31184
  tags: [Phone Numbers]
30777
31185
  summary: A port-in order's pending requirements
@@ -30813,6 +31221,7 @@ paths:
30813
31221
 
30814
31222
  /v1/phone-numbers/port-in/{id}:
30815
31223
  delete:
31224
+ x-resource-group: "telephony"
30816
31225
  operationId: cancelPhoneNumberPortIn
30817
31226
  tags: [Phone Numbers]
30818
31227
  summary: Cancel a port-in
@@ -30842,6 +31251,7 @@ paths:
30842
31251
 
30843
31252
  /v1/phone-numbers/kyc/review-packet:
30844
31253
  post:
31254
+ x-resource-group: "telephony"
30845
31255
  operationId: reviewPhoneNumberKycPacket
30846
31256
  tags: [Phone Numbers]
30847
31257
  summary: Pre-review a KYC packet
@@ -30896,6 +31306,7 @@ paths:
30896
31306
 
30897
31307
  /v1/phone-numbers/{id}/remediate:
30898
31308
  get:
31309
+ x-resource-group: "telephony"
30899
31310
  operationId: getPhoneNumberRemediation
30900
31311
  tags: [Phone Numbers]
30901
31312
  summary: Get declined requirements
@@ -30925,6 +31336,7 @@ paths:
30925
31336
  '401': { $ref: '#/components/responses/Unauthorized' }
30926
31337
  '404': { description: Number not found }
30927
31338
  post:
31339
+ x-resource-group: "telephony"
30928
31340
  operationId: remediatePhoneNumber
30929
31341
  tags: [Phone Numbers]
30930
31342
  summary: Resubmit a declined number
@@ -30969,6 +31381,7 @@ paths:
30969
31381
 
30970
31382
  /v1/phone-numbers/{id}/remediate/reply:
30971
31383
  post:
31384
+ x-resource-group: "telephony"
30972
31385
  operationId: replyToPhoneNumberReviewer
30973
31386
  tags: [Phone Numbers]
30974
31387
  summary: Reply to the regulatory reviewer
@@ -31021,6 +31434,7 @@ paths:
31021
31434
 
31022
31435
  /v1/phone-numbers/{id}/remediate/respond:
31023
31436
  post:
31437
+ x-resource-group: "telephony"
31024
31438
  operationId: respondToPhoneNumberReviewer
31025
31439
  tags: [Phone Numbers]
31026
31440
  summary: Respond to the regulatory reviewer (message + corrections)
@@ -31098,6 +31512,7 @@ paths:
31098
31512
 
31099
31513
  /v1/whatsapp/phone-numbers/kyc:
31100
31514
  get:
31515
+ x-resource-group: "telephony"
31101
31516
  operationId: getWhatsAppNumberKycForm
31102
31517
  deprecated: true
31103
31518
  tags: [WhatsApp Phone Numbers]
@@ -31170,6 +31585,7 @@ paths:
31170
31585
  '400': { description: Country not available }
31171
31586
  '401': { $ref: '#/components/responses/Unauthorized' }
31172
31587
  post:
31588
+ x-resource-group: "telephony"
31173
31589
  operationId: submitWhatsAppNumberKyc
31174
31590
  deprecated: true
31175
31591
  tags: [WhatsApp Phone Numbers]
@@ -31279,6 +31695,7 @@ paths:
31279
31695
 
31280
31696
  /v1/whatsapp/phone-numbers/kyc/upload-document:
31281
31697
  post:
31698
+ x-resource-group: "telephony"
31282
31699
  operationId: uploadWhatsAppNumberKycDocument
31283
31700
  deprecated: true
31284
31701
  tags: [WhatsApp Phone Numbers]
@@ -31316,6 +31733,7 @@ paths:
31316
31733
 
31317
31734
  /v1/whatsapp/phone-numbers/kyc/validate-address:
31318
31735
  post:
31736
+ x-resource-group: "telephony"
31319
31737
  operationId: validateWhatsAppNumberKycAddress
31320
31738
  deprecated: true
31321
31739
  tags: [WhatsApp Phone Numbers]
@@ -31389,6 +31807,7 @@ paths:
31389
31807
 
31390
31808
  /v1/whatsapp/phone-numbers/kyc/share:
31391
31809
  post:
31810
+ x-resource-group: "telephony"
31392
31811
  operationId: createWhatsAppNumberKycLink
31393
31812
  deprecated: true
31394
31813
  tags: [WhatsApp Phone Numbers]
@@ -31453,6 +31872,7 @@ paths:
31453
31872
 
31454
31873
  /v1/whatsapp/phone-numbers/{id}/remediate:
31455
31874
  get:
31875
+ x-resource-group: "telephony"
31456
31876
  operationId: getWhatsAppNumberRemediation
31457
31877
  deprecated: true
31458
31878
  tags: [WhatsApp Phone Numbers]
@@ -31486,6 +31906,7 @@ paths:
31486
31906
  '401': { $ref: '#/components/responses/Unauthorized' }
31487
31907
  '404': { description: Number not found }
31488
31908
  post:
31909
+ x-resource-group: "telephony"
31489
31910
  operationId: remediateWhatsAppNumber
31490
31911
  deprecated: true
31491
31912
  tags: [WhatsApp Phone Numbers]
@@ -31534,6 +31955,7 @@ paths:
31534
31955
 
31535
31956
  /v1/phone-numbers/{id}/voice:
31536
31957
  post:
31958
+ x-resource-group: "telephony"
31537
31959
  operationId: enableVoiceOnNumber
31538
31960
  tags: [Voice]
31539
31961
  summary: Enable phone calling on a number
@@ -31623,6 +32045,7 @@ paths:
31623
32045
  '404': { description: Number not found }
31624
32046
  '422': { description: "This number is hosted by your own carrier (brought via WhatsApp embedded signup), so calls can't be enabled on it." }
31625
32047
  delete:
32048
+ x-resource-group: "telephony"
31626
32049
  operationId: disableVoiceOnNumber
31627
32050
  tags: [Voice]
31628
32051
  summary: Disable phone calling on a number
@@ -31648,6 +32071,7 @@ paths:
31648
32071
 
31649
32072
  /v1/phone-numbers/{id}/sms:
31650
32073
  post:
32074
+ x-resource-group: "telephony"
31651
32075
  operationId: enableSmsOnNumber
31652
32076
  tags: [SMS]
31653
32077
  summary: Enable SMS on a number
@@ -31704,6 +32128,7 @@ paths:
31704
32128
  '404': { description: Number not found }
31705
32129
  '422': { description: "This number is hosted by your own carrier (brought via WhatsApp embedded signup), so SMS can't be enabled on it." }
31706
32130
  delete:
32131
+ x-resource-group: "telephony"
31707
32132
  operationId: disableSmsOnNumber
31708
32133
  tags: [SMS]
31709
32134
  summary: Disable SMS on a number
@@ -31731,6 +32156,7 @@ paths:
31731
32156
 
31732
32157
  /v1/phone-numbers/{id}/sms/reuse-registration:
31733
32158
  post:
32159
+ x-resource-group: "telephony"
31734
32160
  operationId: reuseSmsRegistrationForNumber
31735
32161
  tags: [SMS]
31736
32162
  summary: Add number to SMS registration
@@ -31760,6 +32186,7 @@ paths:
31760
32186
 
31761
32187
  /v1/phone-numbers/{id}/whatsapp/calling:
31762
32188
  get:
32189
+ x-resource-group: "telephony"
31763
32190
  operationId: getWhatsAppCalling
31764
32191
  tags: [WhatsApp Calling]
31765
32192
  summary: Get calling config for a number
@@ -31805,6 +32232,7 @@ paths:
31805
32232
  '401': { $ref: '#/components/responses/Unauthorized' }
31806
32233
  '404': { description: Number not found }
31807
32234
  post:
32235
+ x-resource-group: "telephony"
31808
32236
  operationId: enableWhatsAppCalling
31809
32237
  tags: [WhatsApp Calling]
31810
32238
  summary: Enable calling on a number
@@ -31856,6 +32284,7 @@ paths:
31856
32284
  '404': { description: Phone number not found }
31857
32285
  '422': { description: "Not eligible to enable calling: not on usage-based billing, or the number's messaging limit is below Meta's ~2,000-daily-recipient threshold (TIER_250). Warm the number up to raise the limit." }
31858
32286
  patch:
32287
+ x-resource-group: "telephony"
31859
32288
  operationId: updateWhatsAppCalling
31860
32289
  tags: [WhatsApp Calling]
31861
32290
  summary: Update calling config
@@ -31894,6 +32323,7 @@ paths:
31894
32323
  '404': { description: Phone number not found }
31895
32324
  '422': { description: Calling must be enabled before settings can be updated }
31896
32325
  delete:
32326
+ x-resource-group: "telephony"
31897
32327
  operationId: disableWhatsAppCalling
31898
32328
  tags: [WhatsApp Calling]
31899
32329
  summary: Disable calling on a number
@@ -31914,6 +32344,7 @@ paths:
31914
32344
 
31915
32345
  /v1/phone-numbers/{id}/whatsapp/caller-id-verification:
31916
32346
  post:
32347
+ x-resource-group: "telephony"
31917
32348
  operationId: startWhatsAppCallerIdVerification
31918
32349
  tags: [WhatsApp Calling]
31919
32350
  summary: Start caller-ID verification for a customer-brought number
@@ -31954,6 +32385,7 @@ paths:
31954
32385
 
31955
32386
  /v1/phone-numbers/{id}/whatsapp/caller-id-verification/verify:
31956
32387
  post:
32388
+ x-resource-group: "telephony"
31957
32389
  operationId: verifyWhatsAppCallerId
31958
32390
  tags: [WhatsApp Calling]
31959
32391
  summary: Confirm the caller-ID verification code
@@ -31990,6 +32422,7 @@ paths:
31990
32422
 
31991
32423
  /v1/whatsapp/phone-numbers/{phoneNumberId}:
31992
32424
  get:
32425
+ x-resource-group: "telephony"
31993
32426
  operationId: getWhatsAppPhoneNumber
31994
32427
  deprecated: true
31995
32428
  tags: [WhatsApp Phone Numbers]
@@ -32039,6 +32472,7 @@ paths:
32039
32472
  '401': { $ref: '#/components/responses/Unauthorized' }
32040
32473
  '404': { $ref: '#/components/responses/NotFound' }
32041
32474
  delete:
32475
+ x-resource-group: "telephony"
32042
32476
  operationId: releaseWhatsAppPhoneNumber
32043
32477
  deprecated: true
32044
32478
  tags: [WhatsApp Phone Numbers]
@@ -32097,6 +32531,7 @@ paths:
32097
32531
 
32098
32532
  /v1/whatsapp/sandbox/sessions:
32099
32533
  get:
32534
+ x-resource-group: "messages"
32100
32535
  operationId: listWhatsAppSandboxSessions
32101
32536
  tags: [WhatsApp Sandbox]
32102
32537
  summary: List your sandbox sessions
@@ -32125,6 +32560,7 @@ paths:
32125
32560
  '401': { $ref: '#/components/responses/Unauthorized' }
32126
32561
  '403': { description: Inbox addon required }
32127
32562
  post:
32563
+ x-resource-group: "messages"
32128
32564
  operationId: createWhatsAppSandboxSession
32129
32565
  tags: [WhatsApp Sandbox]
32130
32566
  summary: Start a sandbox activation
@@ -32178,6 +32614,7 @@ paths:
32178
32614
 
32179
32615
  /v1/whatsapp/sandbox/sessions/{sessionId}:
32180
32616
  delete:
32617
+ x-resource-group: "messages"
32181
32618
  operationId: deleteWhatsAppSandboxSession
32182
32619
  tags: [WhatsApp Sandbox]
32183
32620
  summary: Revoke a sandbox session
@@ -32214,6 +32651,7 @@ paths:
32214
32651
 
32215
32652
  /v1/whatsapp/wa-groups:
32216
32653
  get:
32654
+ x-resource-group: "messages"
32217
32655
  operationId: listWhatsAppGroupChats
32218
32656
  tags: [WhatsApp]
32219
32657
  summary: List active groups
@@ -32255,6 +32693,7 @@ paths:
32255
32693
  '400': { $ref: '#/components/responses/BadRequest' }
32256
32694
  '401': { $ref: '#/components/responses/Unauthorized' }
32257
32695
  post:
32696
+ x-resource-group: "messages"
32258
32697
  operationId: createWhatsAppGroupChat
32259
32698
  tags: [WhatsApp]
32260
32699
  summary: Create group
@@ -32298,6 +32737,7 @@ paths:
32298
32737
 
32299
32738
  /v1/whatsapp/wa-groups/{groupId}:
32300
32739
  get:
32740
+ x-resource-group: "messages"
32301
32741
  operationId: getWhatsAppGroupChat
32302
32742
  tags: [WhatsApp]
32303
32743
  summary: Get group info
@@ -32341,6 +32781,7 @@ paths:
32341
32781
  '401': { $ref: '#/components/responses/Unauthorized' }
32342
32782
  '404': { $ref: '#/components/responses/NotFound' }
32343
32783
  post:
32784
+ x-resource-group: "messages"
32344
32785
  operationId: updateWhatsAppGroupChat
32345
32786
  tags: [WhatsApp]
32346
32787
  summary: Update group settings
@@ -32377,6 +32818,7 @@ paths:
32377
32818
  '401': { $ref: '#/components/responses/Unauthorized' }
32378
32819
  '404': { $ref: '#/components/responses/NotFound' }
32379
32820
  delete:
32821
+ x-resource-group: "messages"
32380
32822
  operationId: deleteWhatsAppGroupChat
32381
32823
  tags: [WhatsApp]
32382
32824
  summary: Delete group
@@ -32405,6 +32847,7 @@ paths:
32405
32847
 
32406
32848
  /v1/whatsapp/wa-groups/{groupId}/participants:
32407
32849
  post:
32850
+ x-resource-group: "messages"
32408
32851
  operationId: addWhatsAppGroupParticipants
32409
32852
  tags: [WhatsApp]
32410
32853
  summary: Add participants
@@ -32443,6 +32886,7 @@ paths:
32443
32886
  '400': { $ref: '#/components/responses/BadRequest' }
32444
32887
  '401': { $ref: '#/components/responses/Unauthorized' }
32445
32888
  delete:
32889
+ x-resource-group: "messages"
32446
32890
  operationId: removeWhatsAppGroupParticipants
32447
32891
  tags: [WhatsApp]
32448
32892
  summary: Remove participants
@@ -32482,6 +32926,7 @@ paths:
32482
32926
 
32483
32927
  /v1/whatsapp/wa-groups/{groupId}/invite-link:
32484
32928
  post:
32929
+ x-resource-group: "messages"
32485
32930
  operationId: createWhatsAppGroupInviteLink
32486
32931
  tags: [WhatsApp]
32487
32932
  summary: Create invite link
@@ -32509,6 +32954,7 @@ paths:
32509
32954
 
32510
32955
  /v1/whatsapp/wa-groups/{groupId}/join-requests:
32511
32956
  get:
32957
+ x-resource-group: "messages"
32512
32958
  operationId: listWhatsAppGroupJoinRequests
32513
32959
  tags: [WhatsApp]
32514
32960
  summary: List join requests
@@ -32540,6 +32986,7 @@ paths:
32540
32986
  '400': { $ref: '#/components/responses/BadRequest' }
32541
32987
  '401': { $ref: '#/components/responses/Unauthorized' }
32542
32988
  post:
32989
+ x-resource-group: "messages"
32543
32990
  operationId: approveWhatsAppGroupJoinRequests
32544
32991
  tags: [WhatsApp]
32545
32992
  summary: Approve join requests
@@ -32577,6 +33024,7 @@ paths:
32577
33024
  '400': { $ref: '#/components/responses/BadRequest' }
32578
33025
  '401': { $ref: '#/components/responses/Unauthorized' }
32579
33026
  delete:
33027
+ x-resource-group: "messages"
32580
33028
  operationId: rejectWhatsAppGroupJoinRequests
32581
33029
  tags: [WhatsApp]
32582
33030
  summary: Reject join requests
@@ -32618,6 +33066,7 @@ paths:
32618
33066
 
32619
33067
  /v1/whatsapp/flows:
32620
33068
  get:
33069
+ x-resource-group: "accounts"
32621
33070
  operationId: listWhatsAppFlows
32622
33071
  tags: [WhatsApp Flows]
32623
33072
  summary: List flows
@@ -32660,6 +33109,7 @@ paths:
32660
33109
  '401': { $ref: '#/components/responses/Unauthorized' }
32661
33110
  '404': { description: WhatsApp account not found }
32662
33111
  post:
33112
+ x-resource-group: "accounts"
32663
33113
  operationId: createWhatsAppFlow
32664
33114
  tags: [WhatsApp Flows]
32665
33115
  summary: Create flow
@@ -32720,6 +33170,7 @@ paths:
32720
33170
 
32721
33171
  /v1/whatsapp/flows/{flowId}:
32722
33172
  get:
33173
+ x-resource-group: "accounts"
32723
33174
  operationId: getWhatsAppFlow
32724
33175
  tags: [WhatsApp Flows]
32725
33176
  summary: Get flow
@@ -32761,6 +33212,7 @@ paths:
32761
33212
  '401': { $ref: '#/components/responses/Unauthorized' }
32762
33213
  '404': { description: Flow or account not found }
32763
33214
  patch:
33215
+ x-resource-group: "accounts"
32764
33216
  operationId: updateWhatsAppFlow
32765
33217
  tags: [WhatsApp Flows]
32766
33218
  summary: Update flow
@@ -32799,6 +33251,7 @@ paths:
32799
33251
  '401': { $ref: '#/components/responses/Unauthorized' }
32800
33252
  '404': { description: WhatsApp account or flow not found }
32801
33253
  delete:
33254
+ x-resource-group: "accounts"
32802
33255
  operationId: deleteWhatsAppFlow
32803
33256
  tags: [WhatsApp Flows]
32804
33257
  summary: Delete flow
@@ -32824,6 +33277,7 @@ paths:
32824
33277
 
32825
33278
  /v1/whatsapp/flows/{flowId}/json:
32826
33279
  get:
33280
+ x-resource-group: "accounts"
32827
33281
  operationId: getWhatsAppFlowJson
32828
33282
  tags: [WhatsApp Flows]
32829
33283
  summary: Get flow JSON asset
@@ -32854,6 +33308,7 @@ paths:
32854
33308
  '401': { $ref: '#/components/responses/Unauthorized' }
32855
33309
  '404': { description: WhatsApp account not found }
32856
33310
  put:
33311
+ x-resource-group: "accounts"
32857
33312
  operationId: uploadWhatsAppFlowJson
32858
33313
  tags: [WhatsApp Flows]
32859
33314
  summary: Upload flow JSON
@@ -32941,6 +33396,7 @@ paths:
32941
33396
 
32942
33397
  /v1/whatsapp/flows/{flowId}/preview:
32943
33398
  get:
33399
+ x-resource-group: "accounts"
32944
33400
  operationId: getWhatsAppFlowPreview
32945
33401
  tags: [WhatsApp Flows]
32946
33402
  summary: Get flow preview URL
@@ -32969,6 +33425,7 @@ paths:
32969
33425
 
32970
33426
  /v1/whatsapp/flows/{flowId}/versions:
32971
33427
  get:
33428
+ x-resource-group: "accounts"
32972
33429
  operationId: listWhatsAppFlowVersions
32973
33430
  tags: [WhatsApp Flows]
32974
33431
  summary: List flow versions
@@ -33005,6 +33462,7 @@ paths:
33005
33462
 
33006
33463
  /v1/whatsapp/flows/{flowId}/publish:
33007
33464
  post:
33465
+ x-resource-group: "accounts"
33008
33466
  operationId: publishWhatsAppFlow
33009
33467
  tags: [WhatsApp Flows]
33010
33468
  summary: Publish flow
@@ -33040,6 +33498,7 @@ paths:
33040
33498
 
33041
33499
  /v1/whatsapp/flows/{flowId}/deprecate:
33042
33500
  post:
33501
+ x-resource-group: "accounts"
33043
33502
  operationId: deprecateWhatsAppFlow
33044
33503
  tags: [WhatsApp Flows]
33045
33504
  summary: Deprecate flow
@@ -33074,6 +33533,7 @@ paths:
33074
33533
 
33075
33534
  /v1/whatsapp/flows/send:
33076
33535
  post:
33536
+ x-resource-group: "messages"
33077
33537
  operationId: sendWhatsAppFlowMessage
33078
33538
  tags: [WhatsApp Flows]
33079
33539
  summary: Send flow message
@@ -33144,6 +33604,7 @@ paths:
33144
33604
 
33145
33605
  /v1/whatsapp/flow-responses:
33146
33606
  get:
33607
+ x-resource-group: "messages"
33147
33608
  operationId: listWhatsAppFlowResponses
33148
33609
  tags: [WhatsApp Flows]
33149
33610
  summary: List flow responses
@@ -33187,6 +33648,7 @@ paths:
33187
33648
 
33188
33649
  /v1/contacts:
33189
33650
  get:
33651
+ x-resource-group: "contacts"
33190
33652
  operationId: listContacts
33191
33653
  summary: List contacts
33192
33654
  description: List and search contacts for a profile. Supports filtering by tags, platform, subscription status, and full-text search.
@@ -33247,6 +33709,7 @@ paths:
33247
33709
  '400': { description: Invalid request }
33248
33710
  '401': { $ref: '#/components/responses/Unauthorized' }
33249
33711
  post:
33712
+ x-resource-group: "contacts"
33250
33713
  operationId: createContact
33251
33714
  summary: Create contact
33252
33715
  description: Create a new contact. Optionally create a platform channel in the same request by providing accountId, platform, and platformIdentifier.
@@ -33307,6 +33770,7 @@ paths:
33307
33770
 
33308
33771
  /v1/contacts/{contactId}:
33309
33772
  get:
33773
+ x-resource-group: "contacts"
33310
33774
  operationId: getContact
33311
33775
  summary: Get contact
33312
33776
  description: Returns a contact with all associated messaging channels.
@@ -33360,6 +33824,7 @@ paths:
33360
33824
  '401': { $ref: '#/components/responses/Unauthorized' }
33361
33825
  '404': { $ref: '#/components/responses/NotFound' }
33362
33826
  patch:
33827
+ x-resource-group: "contacts"
33363
33828
  operationId: updateContact
33364
33829
  summary: Update contact
33365
33830
  description: Update one or more fields on a contact. Only provided fields are changed.
@@ -33406,6 +33871,7 @@ paths:
33406
33871
  '401': { $ref: '#/components/responses/Unauthorized' }
33407
33872
  '404': { $ref: '#/components/responses/NotFound' }
33408
33873
  delete:
33874
+ x-resource-group: "contacts"
33409
33875
  operationId: deleteContact
33410
33876
  summary: Delete contact
33411
33877
  description: Permanently deletes a contact and all associated channels.
@@ -33420,6 +33886,7 @@ paths:
33420
33886
 
33421
33887
  /v1/contacts/{contactId}/channels:
33422
33888
  get:
33889
+ x-resource-group: "contacts"
33423
33890
  operationId: getContactChannels
33424
33891
  summary: List channels for a contact
33425
33892
  description: Returns all messaging channels linked to a contact (e.g. Instagram DM, Telegram, WhatsApp).
@@ -33455,6 +33922,7 @@ paths:
33455
33922
 
33456
33923
  /v1/contacts/bulk:
33457
33924
  post:
33925
+ x-resource-group: "contacts"
33458
33926
  operationId: bulkCreateContacts
33459
33927
  summary: Bulk create contacts
33460
33928
  description: 'Import up to 1000 contacts at a time. Skips duplicates, merging any new tags onto the existing contact. accountId is required whenever contacts carry a platformIdentifier (or a row-level accountId); platform is always derived from the resolved account, never used to decide whether channels are created, and a mismatched platform 404s as account not found. When accountId is set, each contact must carry a platformIdentifier; a row missing it is rejected individually (reported in errors[], HTTP 200), not a 400 for the whole import. On phone platforms (whatsapp, sms) the platformIdentifier is normalized to digits and a value that is not phone-shaped is rejected per contact and reported in errors[], not imported.'
@@ -33501,6 +33969,7 @@ paths:
33501
33969
 
33502
33970
  /v1/contacts/{contactId}/fields/{slug}:
33503
33971
  put:
33972
+ x-resource-group: "contacts"
33504
33973
  operationId: setContactFieldValue
33505
33974
  summary: Set custom field value
33506
33975
  description: Set or overwrite a custom field value on a contact. The value type must match the field definition.
@@ -33522,6 +33991,7 @@ paths:
33522
33991
  '401': { $ref: '#/components/responses/Unauthorized' }
33523
33992
  '404': { $ref: '#/components/responses/NotFound' }
33524
33993
  delete:
33994
+ x-resource-group: "contacts"
33525
33995
  operationId: clearContactFieldValue
33526
33996
  summary: Clear custom field value
33527
33997
  description: Remove a custom field value from a contact. The field definition is not affected.
@@ -33538,6 +34008,7 @@ paths:
33538
34008
 
33539
34009
  /v1/custom-fields:
33540
34010
  get:
34011
+ x-resource-group: "accounts"
33541
34012
  operationId: listCustomFields
33542
34013
  summary: List custom field definitions
33543
34014
  description: Returns all custom field definitions. Optionally filter by profile.
@@ -33567,6 +34038,7 @@ paths:
33567
34038
  '400': { description: Invalid profileId format }
33568
34039
  '401': { $ref: '#/components/responses/Unauthorized' }
33569
34040
  post:
34041
+ x-resource-group: "accounts"
33570
34042
  operationId: createCustomField
33571
34043
  summary: Create custom field
33572
34044
  description: Create a new custom field definition. Supported types are text, number, date, boolean, and select.
@@ -33608,6 +34080,7 @@ paths:
33608
34080
 
33609
34081
  /v1/custom-fields/{fieldId}:
33610
34082
  patch:
34083
+ x-resource-group: "accounts"
33611
34084
  operationId: updateCustomField
33612
34085
  summary: Update custom field
33613
34086
  description: Update a custom field definition. The field type cannot be changed after creation.
@@ -33644,6 +34117,7 @@ paths:
33644
34117
  '401': { $ref: '#/components/responses/Unauthorized' }
33645
34118
  '404': { $ref: '#/components/responses/NotFound' }
33646
34119
  delete:
34120
+ x-resource-group: "accounts"
33647
34121
  operationId: deleteCustomField
33648
34122
  summary: Delete custom field
33649
34123
  description: Delete a custom field definition and remove its values from all contacts.
@@ -33660,6 +34134,7 @@ paths:
33660
34134
 
33661
34135
  /v1/broadcasts:
33662
34136
  get:
34137
+ x-resource-group: "messages"
33663
34138
  operationId: listBroadcasts
33664
34139
  summary: List broadcasts
33665
34140
  description: Returns broadcasts with delivery stats. Filter by status, platform, or profile.
@@ -33711,6 +34186,7 @@ paths:
33711
34186
  '400': { description: Invalid request }
33712
34187
  '401': { $ref: '#/components/responses/Unauthorized' }
33713
34188
  post:
34189
+ x-resource-group: "messages"
33714
34190
  operationId: createBroadcast
33715
34191
  summary: Create broadcast draft
33716
34192
  description: Create a broadcast in draft status. Add recipients and then send or schedule it.
@@ -33777,6 +34253,7 @@ paths:
33777
34253
 
33778
34254
  /v1/broadcasts/{broadcastId}:
33779
34255
  get:
34256
+ x-resource-group: "messages"
33780
34257
  operationId: getBroadcast
33781
34258
  summary: Get broadcast details
33782
34259
  description: Returns a broadcast with its full configuration and delivery stats.
@@ -33817,6 +34294,7 @@ paths:
33817
34294
  '401': { $ref: '#/components/responses/Unauthorized' }
33818
34295
  '404': { $ref: '#/components/responses/NotFound' }
33819
34296
  patch:
34297
+ x-resource-group: "messages"
33820
34298
  operationId: updateBroadcast
33821
34299
  summary: Update broadcast
33822
34300
  description: Update a broadcast's name, message, template, or segment filters. Only draft broadcasts can be updated.
@@ -33873,6 +34351,7 @@ paths:
33873
34351
  '401': { $ref: '#/components/responses/Unauthorized' }
33874
34352
  '404': { $ref: '#/components/responses/NotFound' }
33875
34353
  delete:
34354
+ x-resource-group: "messages"
33876
34355
  operationId: deleteBroadcast
33877
34356
  summary: Delete broadcast
33878
34357
  description: Permanently delete a broadcast. Only drafts can be deleted.
@@ -33886,6 +34365,7 @@ paths:
33886
34365
 
33887
34366
  /v1/broadcasts/{broadcastId}/send:
33888
34367
  post:
34368
+ x-resource-group: "messages"
33889
34369
  operationId: sendBroadcast
33890
34370
  summary: Send broadcast now
33891
34371
  description: Immediately start sending a draft broadcast to its recipients.
@@ -33911,6 +34391,7 @@ paths:
33911
34391
 
33912
34392
  /v1/broadcasts/{broadcastId}/schedule:
33913
34393
  post:
34394
+ x-resource-group: "messages"
33914
34395
  operationId: scheduleBroadcast
33915
34396
  summary: Schedule broadcast for later
33916
34397
  description: Schedule a draft broadcast to be sent at a future date and time.
@@ -33947,6 +34428,7 @@ paths:
33947
34428
 
33948
34429
  /v1/broadcasts/{broadcastId}/cancel:
33949
34430
  post:
34431
+ x-resource-group: "messages"
33950
34432
  operationId: cancelBroadcast
33951
34433
  summary: Cancel broadcast
33952
34434
  description: Cancel a scheduled or in-progress broadcast. Already-sent messages are not affected.
@@ -33973,6 +34455,7 @@ paths:
33973
34455
 
33974
34456
  /v1/broadcasts/{broadcastId}/recipients:
33975
34457
  get:
34458
+ x-resource-group: "messages"
33976
34459
  operationId: listBroadcastRecipients
33977
34460
  summary: List broadcast recipients
33978
34461
  description: Returns recipients for a broadcast with individual delivery status. Filter by status.
@@ -34020,6 +34503,7 @@ paths:
34020
34503
  '401': { $ref: '#/components/responses/Unauthorized' }
34021
34504
  '404': { $ref: '#/components/responses/NotFound' }
34022
34505
  post:
34506
+ x-resource-group: "messages"
34023
34507
  operationId: addBroadcastRecipients
34024
34508
  summary: Add recipients to a broadcast
34025
34509
  description: Add recipients by contact IDs, raw phone numbers, or from the broadcast's segment filters.
@@ -34055,6 +34539,7 @@ paths:
34055
34539
 
34056
34540
  /v1/workflows:
34057
34541
  get:
34542
+ x-resource-group: "accounts"
34058
34543
  operationId: listWorkflows
34059
34544
  summary: List workflows
34060
34545
  description: Returns workflows with run stats. Filter by status or profile.
@@ -34099,6 +34584,7 @@ paths:
34099
34584
  hasMore: { type: boolean }
34100
34585
  '401': { $ref: '#/components/responses/Unauthorized' }
34101
34586
  post:
34587
+ x-resource-group: "accounts"
34102
34588
  operationId: createWorkflow
34103
34589
  summary: Create workflow
34104
34590
  description: >
@@ -34147,6 +34633,7 @@ paths:
34147
34633
 
34148
34634
  /v1/workflows/{workflowId}:
34149
34635
  get:
34636
+ x-resource-group: "accounts"
34150
34637
  operationId: getWorkflow
34151
34638
  summary: Get workflow with graph
34152
34639
  description: Returns a workflow including its full node/edge graph and run stats.
@@ -34183,6 +34670,7 @@ paths:
34183
34670
  '401': { $ref: '#/components/responses/Unauthorized' }
34184
34671
  '404': { $ref: '#/components/responses/NotFound' }
34185
34672
  patch:
34673
+ x-resource-group: "accounts"
34186
34674
  operationId: updateWorkflow
34187
34675
  summary: Update workflow
34188
34676
  description: >
@@ -34236,6 +34724,7 @@ paths:
34236
34724
  '401': { $ref: '#/components/responses/Unauthorized' }
34237
34725
  '404': { $ref: '#/components/responses/NotFound' }
34238
34726
  delete:
34727
+ x-resource-group: "accounts"
34239
34728
  operationId: deleteWorkflow
34240
34729
  summary: Delete workflow
34241
34730
  description: Permanently delete a workflow and all of its executions.
@@ -34249,6 +34738,7 @@ paths:
34249
34738
 
34250
34739
  /v1/workflows/{workflowId}/activate:
34251
34740
  post:
34741
+ x-resource-group: "accounts"
34252
34742
  operationId: activateWorkflow
34253
34743
  summary: Activate workflow
34254
34744
  description: Validate the graph is runnable and set the workflow live. Once active, matching inbound messages start executions. Idempotent.
@@ -34276,6 +34766,7 @@ paths:
34276
34766
 
34277
34767
  /v1/workflows/{workflowId}/pause:
34278
34768
  post:
34769
+ x-resource-group: "accounts"
34279
34770
  operationId: pauseWorkflow
34280
34771
  summary: Pause workflow
34281
34772
  description: Stop matching new inbound messages. In-flight executions continue to completion. Idempotent.
@@ -34302,6 +34793,7 @@ paths:
34302
34793
 
34303
34794
  /v1/workflows/{workflowId}/executions:
34304
34795
  get:
34796
+ x-resource-group: "messages"
34305
34797
  operationId: listWorkflowExecutions
34306
34798
  summary: List workflow runs
34307
34799
  description: Returns recent executions (runs) with their status, current node, and accumulated variables.
@@ -34353,6 +34845,7 @@ paths:
34353
34845
  '401': { $ref: '#/components/responses/Unauthorized' }
34354
34846
  '404': { $ref: '#/components/responses/NotFound' }
34355
34847
  post:
34848
+ x-resource-group: "messages"
34356
34849
  operationId: triggerWorkflow
34357
34850
  summary: Manually start a workflow run
34358
34851
  description: >
@@ -34397,6 +34890,7 @@ paths:
34397
34890
 
34398
34891
  /v1/workflows/{workflowId}/executions/{executionId}/events:
34399
34892
  get:
34893
+ x-resource-group: "messages"
34400
34894
  operationId: listWorkflowExecutionEvents
34401
34895
  summary: Get an execution's timeline
34402
34896
  description: >
@@ -34433,6 +34927,7 @@ paths:
34433
34927
 
34434
34928
  /v1/workflows/{workflowId}/duplicate:
34435
34929
  post:
34930
+ x-resource-group: "accounts"
34436
34931
  operationId: duplicateWorkflow
34437
34932
  summary: Duplicate a workflow
34438
34933
  description: >
@@ -34471,6 +34966,7 @@ paths:
34471
34966
 
34472
34967
  /v1/workflows/{workflowId}/versions:
34473
34968
  get:
34969
+ x-resource-group: "accounts"
34474
34970
  operationId: listWorkflowVersions
34475
34971
  summary: List a workflow's version history
34476
34972
  description: >
@@ -34508,6 +35004,7 @@ paths:
34508
35004
 
34509
35005
  /v1/workflows/{workflowId}/versions/{version}:
34510
35006
  get:
35007
+ x-resource-group: "accounts"
34511
35008
  operationId: getWorkflowVersion
34512
35009
  summary: Get a specific workflow version
34513
35010
  description: Returns the full snapshot for a single historical version, including the graph.
@@ -34546,6 +35043,7 @@ paths:
34546
35043
 
34547
35044
  /v1/workflows/{workflowId}/versions/{version}/restore:
34548
35045
  post:
35046
+ x-resource-group: "accounts"
34549
35047
  operationId: restoreWorkflowVersion
34550
35048
  summary: Restore a workflow version
34551
35049
  description: >
@@ -34583,6 +35081,7 @@ paths:
34583
35081
 
34584
35082
  /v1/sequences:
34585
35083
  get:
35084
+ x-resource-group: "messages"
34586
35085
  operationId: listSequences
34587
35086
  summary: List sequences
34588
35087
  description: Returns sequences with enrollment stats. Filter by status, platform, or profile.
@@ -34631,6 +35130,7 @@ paths:
34631
35130
  '400': { description: Invalid request }
34632
35131
  '401': { $ref: '#/components/responses/Unauthorized' }
34633
35132
  post:
35133
+ x-resource-group: "messages"
34634
35134
  operationId: createSequence
34635
35135
  summary: Create sequence
34636
35136
  description: Create a multi-step messaging sequence. Each step has a delay and a message or WhatsApp template.
@@ -34696,6 +35196,7 @@ paths:
34696
35196
 
34697
35197
  /v1/sequences/{sequenceId}:
34698
35198
  get:
35199
+ x-resource-group: "messages"
34699
35200
  operationId: getSequence
34700
35201
  summary: Get sequence with steps
34701
35202
  description: Returns a sequence with all its steps and enrollment stats.
@@ -34740,6 +35241,7 @@ paths:
34740
35241
  '401': { $ref: '#/components/responses/Unauthorized' }
34741
35242
  '404': { $ref: '#/components/responses/NotFound' }
34742
35243
  patch:
35244
+ x-resource-group: "messages"
34743
35245
  operationId: updateSequence
34744
35246
  summary: Update sequence
34745
35247
  description: Update a sequence's name, steps, or exit conditions. Steps can only be modified while the sequence is draft or paused.
@@ -34805,6 +35307,7 @@ paths:
34805
35307
  '401': { $ref: '#/components/responses/Unauthorized' }
34806
35308
  '404': { $ref: '#/components/responses/NotFound' }
34807
35309
  delete:
35310
+ x-resource-group: "messages"
34808
35311
  operationId: deleteSequence
34809
35312
  summary: Delete sequence
34810
35313
  description: Permanently delete a sequence. Active enrollments are stopped.
@@ -34819,6 +35322,7 @@ paths:
34819
35322
 
34820
35323
  /v1/sequences/{sequenceId}/activate:
34821
35324
  post:
35325
+ x-resource-group: "messages"
34822
35326
  operationId: activateSequence
34823
35327
  summary: Activate sequence
34824
35328
  description: Start a draft or paused sequence. The sequence must have at least one step.
@@ -34845,6 +35349,7 @@ paths:
34845
35349
 
34846
35350
  /v1/sequences/{sequenceId}/pause:
34847
35351
  post:
35352
+ x-resource-group: "messages"
34848
35353
  operationId: pauseSequence
34849
35354
  summary: Pause sequence
34850
35355
  description: Pause an active sequence. Enrolled contacts stop receiving messages until the sequence is reactivated.
@@ -34871,6 +35376,7 @@ paths:
34871
35376
 
34872
35377
  /v1/sequences/{sequenceId}/enroll:
34873
35378
  post:
35379
+ x-resource-group: "messages"
34874
35380
  operationId: enrollContacts
34875
35381
  summary: Enroll contacts in a sequence
34876
35382
  description: Enroll one or more contacts into a sequence. Contacts already enrolled are skipped.
@@ -34913,6 +35419,7 @@ paths:
34913
35419
 
34914
35420
  /v1/sequences/{sequenceId}/enroll/{contactId}:
34915
35421
  delete:
35422
+ x-resource-group: "messages"
34916
35423
  operationId: unenrollContact
34917
35424
  summary: Unenroll contact
34918
35425
  description: Remove a contact from a sequence. No further messages will be sent to this contact.
@@ -34928,6 +35435,7 @@ paths:
34928
35435
 
34929
35436
  /v1/sequences/{sequenceId}/enrollments:
34930
35437
  get:
35438
+ x-resource-group: "messages"
34931
35439
  operationId: listSequenceEnrollments
34932
35440
  summary: List enrollments for a sequence
34933
35441
  description: Returns enrolled contacts with their progress, status, and next scheduled step.
@@ -34980,6 +35488,7 @@ paths:
34980
35488
 
34981
35489
  /v1/comment-automations:
34982
35490
  get:
35491
+ x-resource-group: "messages"
34983
35492
  operationId: listCommentAutomations
34984
35493
  tags: [Comment Automations]
34985
35494
  summary: List comment-to-DM automations
@@ -35038,6 +35547,7 @@ paths:
35038
35547
  '400': { description: Invalid request }
35039
35548
  '401': { $ref: '#/components/responses/Unauthorized' }
35040
35549
  post:
35550
+ x-resource-group: "messages"
35041
35551
  operationId: createCommentAutomation
35042
35552
  tags: [Comment Automations]
35043
35553
  summary: Create comment-to-DM automation
@@ -35142,6 +35652,7 @@ paths:
35142
35652
 
35143
35653
  /v1/comment-automations/{automationId}:
35144
35654
  get:
35655
+ x-resource-group: "messages"
35145
35656
  operationId: getCommentAutomation
35146
35657
  tags: [Comment Automations]
35147
35658
  summary: Get automation details
@@ -35204,6 +35715,7 @@ paths:
35204
35715
  '401': { $ref: '#/components/responses/Unauthorized' }
35205
35716
  '404': { $ref: '#/components/responses/NotFound' }
35206
35717
  patch:
35718
+ x-resource-group: "messages"
35207
35719
  operationId: updateCommentAutomation
35208
35720
  tags: [Comment Automations]
35209
35721
  summary: Update automation settings
@@ -35273,6 +35785,7 @@ paths:
35273
35785
  '401': { $ref: '#/components/responses/Unauthorized' }
35274
35786
  '404': { $ref: '#/components/responses/NotFound' }
35275
35787
  delete:
35788
+ x-resource-group: "messages"
35276
35789
  operationId: deleteCommentAutomation
35277
35790
  tags: [Comment Automations]
35278
35791
  summary: Delete automation
@@ -35288,6 +35801,7 @@ paths:
35288
35801
 
35289
35802
  /v1/comment-automations/{automationId}/logs:
35290
35803
  get:
35804
+ x-resource-group: "messages"
35291
35805
  operationId: listCommentAutomationLogs
35292
35806
  tags: [Comment Automations]
35293
35807
  summary: List automation logs
@@ -35337,6 +35851,7 @@ paths:
35337
35851
 
35338
35852
  /v1/ads:
35339
35853
  get:
35854
+ x-resource-group: "ads"
35340
35855
  operationId: listAds
35341
35856
  tags: ["Ad Campaigns"]
35342
35857
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -35393,6 +35908,7 @@ paths:
35393
35908
 
35394
35909
  /v1/ads/keywords:
35395
35910
  get:
35911
+ x-resource-group: "ads"
35396
35912
  operationId: listAdKeywords
35397
35913
  tags: ["Ad Campaigns"]
35398
35914
  x-platforms: ["google"]
@@ -35459,6 +35975,7 @@ paths:
35459
35975
 
35460
35976
  /v1/ads/campaigns:
35461
35977
  get:
35978
+ x-resource-group: "ads"
35462
35979
  operationId: listAdCampaigns
35463
35980
  tags: ["Ad Campaigns"]
35464
35981
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -35511,6 +36028,7 @@ paths:
35511
36028
  description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
35512
36029
 
35513
36030
  post:
36031
+ x-resource-group: "ads"
35514
36032
  operationId: createAdCampaign
35515
36033
  tags: ["Ad Campaigns"]
35516
36034
  x-platforms: ["meta"]
@@ -35581,6 +36099,7 @@ paths:
35581
36099
 
35582
36100
  /v1/ads/campaigns/{campaignId}/status:
35583
36101
  put:
36102
+ x-resource-group: "ads"
35584
36103
  operationId: updateAdCampaignStatus
35585
36104
  tags: ["Ad Campaigns"]
35586
36105
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -35622,6 +36141,7 @@ paths:
35622
36141
 
35623
36142
  /v1/ads/campaigns/{campaignId}:
35624
36143
  put:
36144
+ x-resource-group: "ads"
35625
36145
  operationId: updateAdCampaign
35626
36146
  tags: ["Ad Campaigns"]
35627
36147
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -35696,6 +36216,7 @@ paths:
35696
36216
  '501': { description: Operation not supported on this platform }
35697
36217
 
35698
36218
  delete:
36219
+ x-resource-group: "ads"
35699
36220
  operationId: deleteAdCampaign
35700
36221
  tags: ["Ad Campaigns"]
35701
36222
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -35745,6 +36266,7 @@ paths:
35745
36266
 
35746
36267
  /v1/ads/campaigns/bulk-status:
35747
36268
  post:
36269
+ x-resource-group: "ads"
35748
36270
  operationId: bulkUpdateAdCampaignStatus
35749
36271
  tags: ["Ad Campaigns"]
35750
36272
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -35803,6 +36325,7 @@ paths:
35803
36325
 
35804
36326
  /v1/ads/campaigns/{campaignId}/duplicate:
35805
36327
  post:
36328
+ x-resource-group: "ads"
35806
36329
  operationId: duplicateAdCampaign
35807
36330
  tags: ["Ad Campaigns"]
35808
36331
  x-platforms: ["meta", "tiktok", "linkedin"]
@@ -35899,6 +36422,7 @@ paths:
35899
36422
 
35900
36423
  /v1/ads/ad-sets/{adSetId}/duplicate:
35901
36424
  post:
36425
+ x-resource-group: "ads"
35902
36426
  operationId: duplicateAdSet
35903
36427
  tags: ["Ad Campaigns"]
35904
36428
  x-platforms: ["meta"]
@@ -35959,6 +36483,7 @@ paths:
35959
36483
 
35960
36484
  /v1/ads/{adId}/duplicate:
35961
36485
  post:
36486
+ x-resource-group: "ads"
35962
36487
  operationId: duplicateAd
35963
36488
  tags: ["Ad Campaigns"]
35964
36489
  x-platforms: ["meta"]
@@ -36013,6 +36538,7 @@ paths:
36013
36538
 
36014
36539
  /v1/ads/ad-sets/{adSetId}:
36015
36540
  get:
36541
+ x-resource-group: "ads"
36016
36542
  operationId: getAdSetDetails
36017
36543
  tags: ["Ad Campaigns"]
36018
36544
  x-platforms: ["meta"]
@@ -36042,6 +36568,7 @@ paths:
36042
36568
  '401': { $ref: '#/components/responses/Unauthorized' }
36043
36569
  '501': { description: Only supported on Meta (facebook/instagram) }
36044
36570
  put:
36571
+ x-resource-group: "ads"
36045
36572
  operationId: updateAdSet
36046
36573
  tags: ["Ad Campaigns"]
36047
36574
  x-platforms: ["meta", "tiktok", "openai"]
@@ -36190,6 +36717,7 @@ paths:
36190
36717
 
36191
36718
  /v1/ads/ad-sets/{adSetId}/status:
36192
36719
  put:
36720
+ x-resource-group: "ads"
36193
36721
  operationId: updateAdSetStatus
36194
36722
  tags: ["Ad Campaigns"]
36195
36723
  x-platforms: ["meta", "tiktok"]
@@ -36229,6 +36757,7 @@ paths:
36229
36757
 
36230
36758
  /v1/ads/tree:
36231
36759
  get:
36760
+ x-resource-group: "ads"
36232
36761
  operationId: getAdTree
36233
36762
  tags: ["Ad Campaigns"]
36234
36763
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -36292,6 +36821,7 @@ paths:
36292
36821
 
36293
36822
  /v1/ads/timeline:
36294
36823
  get:
36824
+ x-resource-group: "ads"
36295
36825
  operationId: getAdsTimeline
36296
36826
  tags: ["Ad Campaigns"]
36297
36827
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -36364,6 +36894,7 @@ paths:
36364
36894
 
36365
36895
  /v1/ads/{adId}:
36366
36896
  get:
36897
+ x-resource-group: "ads"
36367
36898
  operationId: getAd
36368
36899
  tags: ["Ad Campaigns"]
36369
36900
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -36399,6 +36930,7 @@ paths:
36399
36930
  '401': { $ref: '#/components/responses/Unauthorized' }
36400
36931
  '404': { $ref: '#/components/responses/NotFound' }
36401
36932
  put:
36933
+ x-resource-group: "ads"
36402
36934
  operationId: updateAd
36403
36935
  tags: ["Ad Campaigns"]
36404
36936
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -36484,6 +37016,7 @@ paths:
36484
37016
  '404': { $ref: '#/components/responses/NotFound' }
36485
37017
  '501': { description: "targeting or creative not supported on the platform (Meta + TikTok only)" }
36486
37018
  delete:
37019
+ x-resource-group: "ads"
36487
37020
  operationId: deleteAd
36488
37021
  tags: ["Ad Campaigns"]
36489
37022
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -36507,6 +37040,7 @@ paths:
36507
37040
 
36508
37041
  /v1/ads/{adId}/status:
36509
37042
  put:
37043
+ x-resource-group: "ads"
36510
37044
  operationId: updateAdStatus
36511
37045
  tags: ["Ad Campaigns"]
36512
37046
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -36552,6 +37086,7 @@ paths:
36552
37086
 
36553
37087
  /v1/ads/campaigns/{campaignId}/analytics:
36554
37088
  get:
37089
+ x-resource-group: "ads"
36555
37090
  operationId: getCampaignAnalytics
36556
37091
  tags: ["Ad Insights"]
36557
37092
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -36636,6 +37171,7 @@ paths:
36636
37171
 
36637
37172
  /v1/ads/preview:
36638
37173
  post:
37174
+ x-resource-group: "ads"
36639
37175
  operationId: generateAdPreviews
36640
37176
  tags: ["Ad Creatives"]
36641
37177
  x-platforms: ["meta"]
@@ -36690,6 +37226,7 @@ paths:
36690
37226
 
36691
37227
  /v1/ads/{adId}/preview:
36692
37228
  get:
37229
+ x-resource-group: "ads"
36693
37230
  operationId: getAdPreviews
36694
37231
  tags: ["Ad Creatives"]
36695
37232
  x-platforms: ["meta"]
@@ -36726,6 +37263,7 @@ paths:
36726
37263
 
36727
37264
  /v1/ads/keywords/ideas:
36728
37265
  post:
37266
+ x-resource-group: "ads"
36729
37267
  operationId: generateKeywordIdeas
36730
37268
  tags: ["Ad Insights"]
36731
37269
  x-platforms: ["google"]
@@ -36779,6 +37317,7 @@ paths:
36779
37317
 
36780
37318
  /v1/ads/keywords/historical-metrics:
36781
37319
  post:
37320
+ x-resource-group: "ads"
36782
37321
  operationId: generateKeywordHistoricalMetrics
36783
37322
  tags: ["Ad Insights"]
36784
37323
  x-platforms: ["google"]
@@ -36826,6 +37365,7 @@ paths:
36826
37365
 
36827
37366
  /v1/ads/insights:
36828
37367
  get:
37368
+ x-resource-group: "ads"
36829
37369
  operationId: queryAdInsights
36830
37370
  tags: ["Ad Insights"]
36831
37371
  x-platforms: ["meta", "google"]
@@ -36894,6 +37434,7 @@ paths:
36894
37434
 
36895
37435
  /v1/ads/insights/reports:
36896
37436
  post:
37437
+ x-resource-group: "ads"
36897
37438
  operationId: createAdInsightsReport
36898
37439
  tags: ["Ad Insights"]
36899
37440
  x-platforms: ["meta"]
@@ -36957,6 +37498,7 @@ paths:
36957
37498
 
36958
37499
  /v1/ads/insights/reports/{reportRunId}:
36959
37500
  get:
37501
+ x-resource-group: "ads"
36960
37502
  operationId: getAdInsightsReport
36961
37503
  tags: ["Ad Insights"]
36962
37504
  x-platforms: ["meta"]
@@ -37000,6 +37542,7 @@ paths:
37000
37542
 
37001
37543
  /v1/ads/{adId}/analytics:
37002
37544
  get:
37545
+ x-resource-group: "ads"
37003
37546
  operationId: getAdAnalytics
37004
37547
  tags: ["Ad Insights"]
37005
37548
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -37081,6 +37624,7 @@ paths:
37081
37624
 
37082
37625
  /v1/ads/{adId}/tracking-tags:
37083
37626
  get:
37627
+ x-resource-group: "ads"
37084
37628
  operationId: getAdTrackingTags
37085
37629
  tags: ["Tracking Tags"]
37086
37630
  x-platforms: ["meta"]
@@ -37121,6 +37665,7 @@ paths:
37121
37665
  '404': { description: "Ad not found" }
37122
37666
  '405': { description: "Platform has no click-URL tracking surface" }
37123
37667
  patch:
37668
+ x-resource-group: "ads"
37124
37669
  operationId: updateAdTrackingTags
37125
37670
  tags: ["Tracking Tags"]
37126
37671
  x-platforms: ["meta"]
@@ -37179,6 +37724,7 @@ paths:
37179
37724
  '422': { description: "Meta creative cannot be rebuilt (e.g. placement-customized/asset-feed/dark creative)" }
37180
37725
  /v1/ads/{adId}/comments:
37181
37726
  get:
37727
+ x-resource-group: "engagement"
37182
37728
  operationId: getAdComments
37183
37729
  tags: ["Ad Accounts"]
37184
37730
  x-platforms: ["meta"]
@@ -37278,6 +37824,7 @@ paths:
37278
37824
 
37279
37825
  /v1/ads/business-centers:
37280
37826
  get:
37827
+ x-resource-group: "ads"
37281
37828
  operationId: listAdsBusinessCenters
37282
37829
  tags: ["Ad Accounts"]
37283
37830
  x-platforms: ["tiktok"]
@@ -37310,6 +37857,7 @@ paths:
37310
37857
 
37311
37858
  /v1/ads/activity:
37312
37859
  get:
37860
+ x-resource-group: "ads"
37313
37861
  operationId: getAdsActivityLog
37314
37862
  tags: ["Ad Accounts"]
37315
37863
  x-platforms: ["meta"]
@@ -37352,6 +37900,7 @@ paths:
37352
37900
 
37353
37901
  /v1/ads/rf-predictions:
37354
37902
  post:
37903
+ x-resource-group: "ads"
37355
37904
  operationId: createRfPrediction
37356
37905
  tags: ["Reach and Frequency"]
37357
37906
  x-platforms: ["meta"]
@@ -37405,6 +37954,7 @@ paths:
37405
37954
 
37406
37955
  /v1/ads/rf-predictions/{predictionId}:
37407
37956
  get:
37957
+ x-resource-group: "ads"
37408
37958
  operationId: getRfPrediction
37409
37959
  tags: ["Reach and Frequency"]
37410
37960
  x-platforms: ["meta"]
@@ -37430,6 +37980,7 @@ paths:
37430
37980
  '401': { $ref: '#/components/responses/Unauthorized' }
37431
37981
  '501': { description: Only supported on Meta (facebook/instagram) }
37432
37982
  delete:
37983
+ x-resource-group: "ads"
37433
37984
  operationId: cancelRfReservation
37434
37985
  tags: ["Reach and Frequency"]
37435
37986
  x-platforms: ["meta"]
@@ -37450,6 +38001,7 @@ paths:
37450
38001
 
37451
38002
  /v1/ads/rf-predictions/{predictionId}/reserve:
37452
38003
  post:
38004
+ x-resource-group: "ads"
37453
38005
  operationId: reserveRfPrediction
37454
38006
  tags: ["Reach and Frequency"]
37455
38007
  x-platforms: ["meta"]
@@ -37488,6 +38040,7 @@ paths:
37488
38040
 
37489
38041
  /v1/ads/studies:
37490
38042
  get:
38043
+ x-resource-group: "ads"
37491
38044
  operationId: listAdStudies
37492
38045
  tags: ["Ad Accounts"]
37493
38046
  x-platforms: ["meta"]
@@ -37526,6 +38079,7 @@ paths:
37526
38079
 
37527
38080
  /v1/ads/businesses:
37528
38081
  get:
38082
+ x-resource-group: "ads"
37529
38083
  operationId: listMetaBusinesses
37530
38084
  tags: ["Ad Accounts"]
37531
38085
  x-platforms: ["meta"]
@@ -37562,6 +38116,7 @@ paths:
37562
38116
 
37563
38117
  /v1/ads/labels:
37564
38118
  get:
38119
+ x-resource-group: "ads"
37565
38120
  operationId: listAdLabels
37566
38121
  tags: ["Ad Accounts"]
37567
38122
  x-platforms: ["meta"]
@@ -37598,6 +38153,7 @@ paths:
37598
38153
 
37599
38154
  /v1/ads/high-demand-periods:
37600
38155
  get:
38156
+ x-resource-group: "ads"
37601
38157
  operationId: listHighDemandPeriods
37602
38158
  tags: ["Ad Accounts"]
37603
38159
  x-platforms: ["meta"]
@@ -37637,6 +38193,7 @@ paths:
37637
38193
 
37638
38194
  /v1/ads/creatives:
37639
38195
  get:
38196
+ x-resource-group: "ads"
37640
38197
  operationId: listAdCreatives
37641
38198
  tags: ["Ad Creatives"]
37642
38199
  x-platforms: ["meta"]
@@ -37675,6 +38232,7 @@ paths:
37675
38232
  '401': { $ref: '#/components/responses/Unauthorized' }
37676
38233
  '501': { description: Only supported on Meta (facebook/instagram) }
37677
38234
  post:
38235
+ x-resource-group: "ads"
37678
38236
  operationId: createAdCreative
37679
38237
  tags: ["Ad Creatives"]
37680
38238
  x-platforms: ["meta"]
@@ -37739,6 +38297,7 @@ paths:
37739
38297
 
37740
38298
  /v1/ads/creatives/{creativeId}:
37741
38299
  get:
38300
+ x-resource-group: "ads"
37742
38301
  operationId: getAdCreative
37743
38302
  tags: ["Ad Creatives"]
37744
38303
  x-platforms: ["meta"]
@@ -37765,6 +38324,7 @@ paths:
37765
38324
  '401': { $ref: '#/components/responses/Unauthorized' }
37766
38325
  '501': { description: Only supported on Meta (facebook/instagram) }
37767
38326
  put:
38327
+ x-resource-group: "ads"
37768
38328
  operationId: updateAdCreative
37769
38329
  tags: ["Ad Creatives"]
37770
38330
  x-platforms: ["meta"]
@@ -37802,6 +38362,7 @@ paths:
37802
38362
  '401': { $ref: '#/components/responses/Unauthorized' }
37803
38363
  '501': { description: Only supported on Meta (facebook/instagram) }
37804
38364
  delete:
38365
+ x-resource-group: "ads"
37805
38366
  operationId: deleteAdCreative
37806
38367
  tags: ["Ad Creatives"]
37807
38368
  x-platforms: ["meta"]
@@ -37830,6 +38391,7 @@ paths:
37830
38391
 
37831
38392
  /v1/ads/value-rule-sets:
37832
38393
  get:
38394
+ x-resource-group: "ads"
37833
38395
  operationId: listValueRuleSets
37834
38396
  tags: ["Ad Accounts"]
37835
38397
  x-platforms: ["meta"]
@@ -37880,6 +38442,7 @@ paths:
37880
38442
  '501': { description: Only supported on Meta (facebook/instagram) }
37881
38443
 
37882
38444
  post:
38445
+ x-resource-group: "ads"
37883
38446
  operationId: createValueRuleSet
37884
38447
  tags: ["Ad Accounts"]
37885
38448
  x-platforms: ["meta"]
@@ -37950,6 +38513,7 @@ paths:
37950
38513
 
37951
38514
  /v1/ads/value-rule-sets/{valueRuleSetId}:
37952
38515
  get:
38516
+ x-resource-group: "ads"
37953
38517
  operationId: getValueRuleSet
37954
38518
  tags: ["Ad Accounts"]
37955
38519
  x-platforms: ["meta"]
@@ -37981,6 +38545,7 @@ paths:
37981
38545
  '501': { description: Only supported on Meta (facebook/instagram) }
37982
38546
 
37983
38547
  put:
38548
+ x-resource-group: "ads"
37984
38549
  operationId: updateValueRuleSet
37985
38550
  tags: ["Ad Accounts"]
37986
38551
  x-platforms: ["meta"]
@@ -38041,6 +38606,7 @@ paths:
38041
38606
  '501': { description: Only supported on Meta (facebook/instagram) }
38042
38607
 
38043
38608
  delete:
38609
+ x-resource-group: "ads"
38044
38610
  operationId: deleteValueRuleSet
38045
38611
  tags: ["Ad Accounts"]
38046
38612
  x-platforms: ["meta"]
@@ -38071,6 +38637,7 @@ paths:
38071
38637
 
38072
38638
  /v1/ads/accounts/finance:
38073
38639
  get:
38640
+ x-resource-group: "ads"
38074
38641
  operationId: getAdAccountFinance
38075
38642
  tags: ["Ad Accounts"]
38076
38643
  x-platforms: ["meta"]
@@ -38108,6 +38675,7 @@ paths:
38108
38675
 
38109
38676
  /v1/ads/accounts:
38110
38677
  get:
38678
+ x-resource-group: "ads"
38111
38679
  operationId: listAdAccounts
38112
38680
  tags: ["Ad Accounts"]
38113
38681
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -38182,6 +38750,7 @@ paths:
38182
38750
  description: Platform ads connection required (TikTok Ads, X Ads) or Instagram missing linked Facebook account
38183
38751
  '429': { $ref: '#/components/responses/RateLimited' }
38184
38752
  patch:
38753
+ x-resource-group: "ads"
38185
38754
  operationId: updateAdAccount
38186
38755
  tags: ["Ad Accounts"]
38187
38756
  x-platforms: ["meta"]
@@ -38239,6 +38808,7 @@ paths:
38239
38808
 
38240
38809
  /v1/ads/dsa-defaults:
38241
38810
  get:
38811
+ x-resource-group: "ads"
38242
38812
  operationId: getDsaDefaults
38243
38813
  tags: ["Ad Accounts"]
38244
38814
  x-platforms: ["meta"]
@@ -38274,6 +38844,7 @@ paths:
38274
38844
 
38275
38845
  /v1/ads/dsa-recommendations:
38276
38846
  get:
38847
+ x-resource-group: "ads"
38277
38848
  operationId: getDsaRecommendations
38278
38849
  tags: ["Ad Accounts"]
38279
38850
  x-platforms: ["meta"]
@@ -38312,6 +38883,7 @@ paths:
38312
38883
 
38313
38884
  /v1/ads/boost:
38314
38885
  post:
38886
+ x-resource-group: "ads"
38315
38887
  operationId: boostPost
38316
38888
  tags: ["Ad Campaigns"]
38317
38889
  x-platforms: ["meta"]
@@ -38567,6 +39139,7 @@ paths:
38567
39139
 
38568
39140
  /v1/ads/create:
38569
39141
  post:
39142
+ x-resource-group: "ads"
38570
39143
  operationId: createStandaloneAd
38571
39144
  tags: ["Ad Campaigns"]
38572
39145
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -39450,6 +40023,7 @@ paths:
39450
40023
 
39451
40024
  /v1/ads/leads:
39452
40025
  get:
40026
+ x-resource-group: "contacts"
39453
40027
  operationId: listLeads
39454
40028
  tags: ["Lead Gen"]
39455
40029
  x-platforms: ["meta", "linkedin"]
@@ -39508,6 +40082,7 @@ paths:
39508
40082
 
39509
40083
  /v1/ads/lead-forms:
39510
40084
  get:
40085
+ x-resource-group: "ads"
39511
40086
  operationId: listLeadForms
39512
40087
  tags: ["Lead Gen"]
39513
40088
  x-platforms: ["meta", "linkedin"]
@@ -39537,6 +40112,7 @@ paths:
39537
40112
  '401': { $ref: '#/components/responses/Unauthorized' }
39538
40113
  '403': { description: Ads add-on required. }
39539
40114
  post:
40115
+ x-resource-group: "ads"
39540
40116
  operationId: createLeadForm
39541
40117
  tags: ["Lead Gen"]
39542
40118
  x-platforms: ["meta", "linkedin"]
@@ -39693,6 +40269,7 @@ paths:
39693
40269
 
39694
40270
  /v1/ads/lead-forms/{formId}:
39695
40271
  get:
40272
+ x-resource-group: "ads"
39696
40273
  operationId: getLeadForm
39697
40274
  tags: ["Lead Gen"]
39698
40275
  x-platforms: ["meta", "linkedin"]
@@ -39709,6 +40286,7 @@ paths:
39709
40286
  '400': { $ref: '#/components/responses/BadRequest' }
39710
40287
  '401': { $ref: '#/components/responses/Unauthorized' }
39711
40288
  delete:
40289
+ x-resource-group: "ads"
39712
40290
  operationId: archiveLeadForm
39713
40291
  tags: ["Lead Gen"]
39714
40292
  x-platforms: ["meta", "linkedin"]
@@ -39728,6 +40306,7 @@ paths:
39728
40306
 
39729
40307
  /v1/ads/lead-forms/{formId}/leads:
39730
40308
  get:
40309
+ x-resource-group: "contacts"
39731
40310
  operationId: listFormLeads
39732
40311
  tags: ["Lead Gen"]
39733
40312
  x-platforms: ["meta"]
@@ -39767,6 +40346,7 @@ paths:
39767
40346
 
39768
40347
  /v1/ads/lead-forms/{formId}/test-leads:
39769
40348
  post:
40349
+ x-resource-group: "contacts"
39770
40350
  operationId: createTestLead
39771
40351
  tags: ["Lead Gen"]
39772
40352
  x-platforms: ["meta"]
@@ -39806,6 +40386,7 @@ paths:
39806
40386
 
39807
40387
  /v1/ads/images:
39808
40388
  post:
40389
+ x-resource-group: "ads"
39809
40390
  operationId: uploadAdImage
39810
40391
  tags: ["Ad Creatives"]
39811
40392
  x-platforms: ["meta"]
@@ -39848,6 +40429,7 @@ paths:
39848
40429
  '501': { description: Only supported on Meta (facebook/instagram) }
39849
40430
 
39850
40431
  get:
40432
+ x-resource-group: "ads"
39851
40433
  operationId: listAdImages
39852
40434
  tags: ["Ad Creatives"]
39853
40435
  x-platforms: ["meta"]
@@ -39887,6 +40469,7 @@ paths:
39887
40469
 
39888
40470
  /v1/ads/interests:
39889
40471
  get:
40472
+ x-resource-group: "ads"
39890
40473
  operationId: searchAdInterests
39891
40474
  deprecated: true
39892
40475
  tags: ["Ad Targeting"]
@@ -39924,6 +40507,7 @@ paths:
39924
40507
 
39925
40508
  /v1/ads/targeting/search:
39926
40509
  get:
40510
+ x-resource-group: "ads"
39927
40511
  operationId: searchAdTargeting
39928
40512
  tags: ["Ad Targeting"]
39929
40513
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest"]
@@ -39986,6 +40570,7 @@ paths:
39986
40570
 
39987
40571
  /v1/ads/targeting/reach-estimate:
39988
40572
  post:
40573
+ x-resource-group: "ads"
39989
40574
  operationId: estimateAdReach
39990
40575
  tags: ["Ad Targeting"]
39991
40576
  x-platforms: ["meta"]
@@ -40044,6 +40629,7 @@ paths:
40044
40629
 
40045
40630
  /v1/ads/targeting/bid-pricing:
40046
40631
  post:
40632
+ x-resource-group: "ads"
40047
40633
  operationId: getLinkedInBidPricing
40048
40634
  tags: ["Ad Targeting"]
40049
40635
  x-platforms: ["linkedin"]
@@ -40115,6 +40701,7 @@ paths:
40115
40701
 
40116
40702
  /v1/ads/targeting/supply-forecast:
40117
40703
  post:
40704
+ x-resource-group: "ads"
40118
40705
  operationId: getLinkedInSupplyForecast
40119
40706
  tags: ["Ad Targeting"]
40120
40707
  x-platforms: ["linkedin"]
@@ -40198,6 +40785,7 @@ paths:
40198
40785
 
40199
40786
  /v1/ads/catalogs:
40200
40787
  get:
40788
+ x-resource-group: "ads"
40201
40789
  operationId: listAdCatalogs
40202
40790
  tags: ["Ad Creatives"]
40203
40791
  x-platforms: ["meta"]
@@ -40231,6 +40819,7 @@ paths:
40231
40819
  description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
40232
40820
  /v1/ads/catalogs/{catalogId}/product-sets:
40233
40821
  get:
40822
+ x-resource-group: "ads"
40234
40823
  operationId: listAdCatalogProductSets
40235
40824
  tags: ["Ad Creatives"]
40236
40825
  x-platforms: ["meta"]
@@ -40263,6 +40852,7 @@ paths:
40263
40852
  description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
40264
40853
  /v1/ads/audiences:
40265
40854
  get:
40855
+ x-resource-group: "ads"
40266
40856
  operationId: listAdAudiences
40267
40857
  tags: ["Ad Audiences"]
40268
40858
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -40306,6 +40896,7 @@ paths:
40306
40896
  '403':
40307
40897
  description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
40308
40898
  post:
40899
+ x-resource-group: "ads"
40309
40900
  operationId: createAdAudience
40310
40901
  tags: ["Ad Audiences"]
40311
40902
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -40457,6 +41048,7 @@ paths:
40457
41048
 
40458
41049
  /v1/ads/audiences/{audienceId}:
40459
41050
  get:
41051
+ x-resource-group: "ads"
40460
41052
  operationId: getAdAudience
40461
41053
  tags: ["Ad Audiences"]
40462
41054
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -40481,6 +41073,7 @@ paths:
40481
41073
  description: Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
40482
41074
  '404': { $ref: '#/components/responses/NotFound' }
40483
41075
  put:
41076
+ x-resource-group: "ads"
40484
41077
  operationId: updateAdAudience
40485
41078
  tags: ["Ad Audiences"]
40486
41079
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -40531,6 +41124,7 @@ paths:
40531
41124
  '501':
40532
41125
  description: Platform audience updates are only supported on Meta
40533
41126
  delete:
41127
+ x-resource-group: "ads"
40534
41128
  operationId: deleteAdAudience
40535
41129
  tags: ["Ad Audiences"]
40536
41130
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -40556,6 +41150,7 @@ paths:
40556
41150
 
40557
41151
  /v1/ads/audiences/{audienceId}/users:
40558
41152
  post:
41153
+ x-resource-group: "ads"
40559
41154
  operationId: addUsersToAdAudience
40560
41155
  tags: ["Ad Audiences"]
40561
41156
  x-platforms: ["meta", "google", "tiktok", "linkedin", "pinterest", "x"]
@@ -40607,6 +41202,7 @@ paths:
40607
41202
 
40608
41203
  /v1/ads/conversions/quality:
40609
41204
  get:
41205
+ x-resource-group: "ads"
40610
41206
  operationId: getConversionsQuality
40611
41207
  tags: [Conversions]
40612
41208
  x-platforms: ["meta"]
@@ -40649,6 +41245,7 @@ paths:
40649
41245
  '405': { description: "Platform does not expose Event Match Quality (non-Meta)." }
40650
41246
  /v1/ads/conversions:
40651
41247
  post:
41248
+ x-resource-group: "ads"
40652
41249
  operationId: sendConversions
40653
41250
  tags: [Conversions]
40654
41251
  x-platforms: ["meta", "google", "tiktok", "linkedin"]
@@ -40799,6 +41396,7 @@ paths:
40799
41396
 
40800
41397
  /v1/ads/conversions/adjustments:
40801
41398
  post:
41399
+ x-resource-group: "ads"
40802
41400
  operationId: adjustConversions
40803
41401
  tags: [Conversions]
40804
41402
  x-platforms: ["meta"]
@@ -40920,6 +41518,7 @@ paths:
40920
41518
 
40921
41519
  /v1/accounts/{accountId}/conversion-destinations:
40922
41520
  get:
41521
+ x-resource-group: "ads"
40923
41522
  operationId: listConversionDestinations
40924
41523
  tags: [Conversions]
40925
41524
  x-platforms: ["meta", "google", "tiktok", "linkedin"]
@@ -40995,6 +41594,7 @@ paths:
40995
41594
  description: LinkedIn rate limit hit. Retry with backoff.
40996
41595
 
40997
41596
  post:
41597
+ x-resource-group: "ads"
40998
41598
  operationId: createConversionDestination
40999
41599
  tags: [Conversions]
41000
41600
  x-platforms: ["meta", "google", "tiktok", "linkedin"]
@@ -41165,6 +41765,7 @@ paths:
41165
41765
 
41166
41766
  /v1/accounts/{accountId}/conversion-destinations/{destinationId}:
41167
41767
  get:
41768
+ x-resource-group: "ads"
41168
41769
  operationId: getConversionDestination
41169
41770
  tags: [Conversions]
41170
41771
  x-platforms: ["meta", "google", "tiktok", "linkedin"]
@@ -41201,6 +41802,7 @@ paths:
41201
41802
  '429': { description: LinkedIn rate limit hit. Retry with backoff. }
41202
41803
 
41203
41804
  patch:
41805
+ x-resource-group: "ads"
41204
41806
  operationId: updateConversionDestination
41205
41807
  tags: [Conversions]
41206
41808
  x-platforms: ["meta", "google", "tiktok", "linkedin"]
@@ -41276,6 +41878,7 @@ paths:
41276
41878
  '429': { description: LinkedIn rate limit hit. Retry with backoff. }
41277
41879
 
41278
41880
  delete:
41881
+ x-resource-group: "ads"
41279
41882
  operationId: deleteConversionDestination
41280
41883
  tags: [Conversions]
41281
41884
  x-platforms: ["meta", "google", "tiktok", "linkedin"]
@@ -41309,6 +41912,7 @@ paths:
41309
41912
 
41310
41913
  /v1/accounts/{accountId}/conversion-destinations/{destinationId}/associations:
41311
41914
  get:
41915
+ x-resource-group: "ads"
41312
41916
  operationId: listConversionAssociations
41313
41917
  tags: [Conversions]
41314
41918
  x-platforms: ["meta", "google", "tiktok", "linkedin"]
@@ -41352,6 +41956,7 @@ paths:
41352
41956
  '429': { description: LinkedIn rate limit hit. Retry with backoff. }
41353
41957
 
41354
41958
  post:
41959
+ x-resource-group: "ads"
41355
41960
  operationId: addConversionAssociations
41356
41961
  tags: [Conversions]
41357
41962
  x-platforms: ["meta", "google", "tiktok", "linkedin"]
@@ -41413,6 +42018,7 @@ paths:
41413
42018
  '429': { description: LinkedIn rate limit hit. Retry with backoff. }
41414
42019
 
41415
42020
  delete:
42021
+ x-resource-group: "ads"
41416
42022
  operationId: removeConversionAssociations
41417
42023
  tags: [Conversions]
41418
42024
  x-platforms: ["meta", "google", "tiktok", "linkedin"]
@@ -41467,6 +42073,7 @@ paths:
41467
42073
 
41468
42074
  /v1/accounts/{accountId}/conversion-destinations/{destinationId}/metrics:
41469
42075
  get:
42076
+ x-resource-group: "ads"
41470
42077
  operationId: getConversionMetrics
41471
42078
  tags: [Conversions]
41472
42079
  x-platforms: ["meta", "google", "tiktok", "linkedin"]
@@ -41528,6 +42135,7 @@ paths:
41528
42135
 
41529
42136
  /v1/whatsapp/conversions:
41530
42137
  get:
42138
+ x-resource-group: "ads"
41531
42139
  operationId: listWhatsAppConversions
41532
42140
  tags: [WhatsApp]
41533
42141
  summary: List conversion events
@@ -41592,6 +42200,7 @@ paths:
41592
42200
  '401': { $ref: '#/components/responses/Unauthorized' }
41593
42201
  '404': { description: WhatsApp account not found }
41594
42202
  post:
42203
+ x-resource-group: "ads"
41595
42204
  operationId: sendWhatsAppConversion
41596
42205
  tags: [WhatsApp]
41597
42206
  summary: Send WhatsApp conversion event
@@ -41768,6 +42377,7 @@ paths:
41768
42377
 
41769
42378
  /v1/ads/messaging:
41770
42379
  post:
42380
+ x-resource-group: "ads"
41771
42381
  operationId: createMessagingAd
41772
42382
  tags: ["Messaging Ads"]
41773
42383
  x-platforms: ["meta"]
@@ -41805,6 +42415,7 @@ paths:
41805
42415
 
41806
42416
  /v1/ads/call:
41807
42417
  post:
42418
+ x-resource-group: "ads"
41808
42419
  operationId: createCallAd
41809
42420
  tags: ["Messaging Ads"]
41810
42421
  x-platforms: ["meta"]
@@ -41843,6 +42454,7 @@ paths:
41843
42454
 
41844
42455
  /v1/ads/ctwa:
41845
42456
  post:
42457
+ x-resource-group: "ads"
41846
42458
  operationId: createCtwaAd
41847
42459
  tags: ["Messaging Ads"]
41848
42460
  x-platforms: ["meta"]
@@ -41907,6 +42519,7 @@ paths:
41907
42519
 
41908
42520
  /v1/accounts/{accountId}/tracking-tags:
41909
42521
  get:
42522
+ x-resource-group: "ads"
41910
42523
  operationId: listTrackingTags
41911
42524
  tags: ["Tracking Tags"]
41912
42525
  x-platforms: ["meta"]
@@ -41950,6 +42563,7 @@ paths:
41950
42563
  '405': { description: Platform does not support listing tracking tags. }
41951
42564
 
41952
42565
  post:
42566
+ x-resource-group: "ads"
41953
42567
  operationId: createTrackingTag
41954
42568
  tags: ["Tracking Tags"]
41955
42569
  x-platforms: ["meta"]
@@ -42015,6 +42629,7 @@ paths:
42015
42629
 
42016
42630
  /v1/accounts/{accountId}/tracking-tags/{tagId}:
42017
42631
  get:
42632
+ x-resource-group: "ads"
42018
42633
  operationId: getTrackingTag
42019
42634
  tags: ["Tracking Tags"]
42020
42635
  x-platforms: ["meta"]
@@ -42046,6 +42661,7 @@ paths:
42046
42661
  '405': { description: Platform does not support fetching a tracking tag. }
42047
42662
 
42048
42663
  patch:
42664
+ x-resource-group: "ads"
42049
42665
  operationId: updateTrackingTag
42050
42666
  tags: ["Tracking Tags"]
42051
42667
  x-platforms: ["meta"]
@@ -42112,6 +42728,7 @@ paths:
42112
42728
 
42113
42729
  /v1/accounts/{accountId}/tracking-tags/{tagId}/shared-accounts:
42114
42730
  get:
42731
+ x-resource-group: "ads"
42115
42732
  operationId: listTrackingTagSharedAccounts
42116
42733
  tags: ["Tracking Tags"]
42117
42734
  x-platforms: ["meta"]
@@ -42140,6 +42757,7 @@ paths:
42140
42757
  '405': { description: Platform does not support shared accounts. }
42141
42758
 
42142
42759
  post:
42760
+ x-resource-group: "ads"
42143
42761
  operationId: addTrackingTagSharedAccount
42144
42762
  tags: ["Tracking Tags"]
42145
42763
  x-platforms: ["meta"]
@@ -42181,6 +42799,7 @@ paths:
42181
42799
  '405': { description: Platform does not support shared accounts. }
42182
42800
 
42183
42801
  delete:
42802
+ x-resource-group: "ads"
42184
42803
  operationId: removeTrackingTagSharedAccount
42185
42804
  tags: ["Tracking Tags"]
42186
42805
  x-platforms: ["meta"]
@@ -42205,6 +42824,7 @@ paths:
42205
42824
 
42206
42825
  /v1/accounts/{accountId}/tracking-tags/{tagId}/stats:
42207
42826
  get:
42827
+ x-resource-group: "ads"
42208
42828
  operationId: getTrackingTagStats
42209
42829
  tags: ["Tracking Tags"]
42210
42830
  x-platforms: ["meta"]
@@ -42271,6 +42891,7 @@ paths:
42271
42891
 
42272
42892
  /v1/verify/verifications:
42273
42893
  post:
42894
+ x-resource-group: "telephony"
42274
42895
  operationId: createVerification
42275
42896
  tags: [Verify]
42276
42897
  summary: Send a verification code
@@ -42328,6 +42949,7 @@ paths:
42328
42949
 
42329
42950
  /v1/verify/verifications/{verificationId}:
42330
42951
  get:
42952
+ x-resource-group: "telephony"
42331
42953
  operationId: getVerification
42332
42954
  tags: [Verify]
42333
42955
  summary: Get a verification
@@ -42352,6 +42974,7 @@ paths:
42352
42974
 
42353
42975
  /v1/verify/verifications/{verificationId}/check:
42354
42976
  post:
42977
+ x-resource-group: "telephony"
42355
42978
  operationId: checkVerification
42356
42979
  tags: [Verify]
42357
42980
  summary: Check a verification code