@funnelchat-hq/n8n-nodes-funnelchat 0.2.0 → 0.2.2

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.
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OPERATIONS = exports.RESOURCES = exports.SPEC_SOURCE = void 0;
4
4
  exports.SPEC_SOURCE = {
5
5
  "title": "Funnelchat API v0",
6
- "sha256": "0f451feaba59418f3a556f58856f841f12570973fd6525103e8cc0128ab64374",
6
+ "sha256": "0ffaad2b25733d28b2cc07dde8152400c3c68974b3515e71e116ce599312b0fa",
7
7
  "description": "Unified OpenAPI specification of the Funnelchat public API, copied from the developer portal (see spec/PROVENANCE.md).",
8
8
  "supplements": [
9
9
  {
@@ -17,12 +17,6 @@ exports.SPEC_SOURCE = {
17
17
  "source": "spec/funnelchat.json of 2026-10-15 (developers-portal feat/openapi-unificada @ 0ef4abb, sha256 8bbbae569b4cab520884db98f28204156c1bd6c629578bee609343c193e0dadb), copied with its references resolved; checked against conversations tag v1.19.7 @ 4e35ddb835249d37576597cc9a965c3e16ccb6d2",
18
18
  "used": 2,
19
19
  "ignored": 0
20
- },
21
- {
22
- "id": "communities-v2.35.5",
23
- "source": "communities tag v2.35.5 @ 2be913d45b123466cc9aa26a73343e9d2b1c68b1 (the one running in production on 2026-11-04), read only with git show",
24
- "used": 2,
25
- "ignored": 0
26
20
  }
27
21
  ]
28
22
  };
@@ -30,47 +24,56 @@ exports.RESOURCES = [
30
24
  {
31
25
  "value": "contact",
32
26
  "name": "Contacts",
33
- "description": "Contacts of the account: create, update, find and delete them, with their tags, custom fields and notes."
27
+ "description": "Contacts of the account: create, update, find and delete them, with their tags, custom fields and notes.",
28
+ "defaultOperation": "contact.customFields"
34
29
  },
35
30
  {
36
31
  "value": "conversation",
37
32
  "name": "Conversations and Messages",
38
- "description": "Conversations with contacts and their messages: list, assign, close, send messages and files, read a message by ID, forward, react and send contact cards."
33
+ "description": "Conversations with contacts and their messages: list, assign, close, send messages and files, read a message by ID, forward, react and send contact cards.",
34
+ "defaultOperation": "conversation.getLatestMessages"
39
35
  },
40
36
  {
41
37
  "value": "template",
42
38
  "name": "Templates",
43
- "description": "WhatsApp message templates: list, create, update, delete and send them."
39
+ "description": "WhatsApp message templates: list, create, update, delete and send them.",
40
+ "defaultOperation": "messageTemplate.quickReplyButtons"
44
41
  },
45
42
  {
46
43
  "value": "form",
47
44
  "name": "WhatsApp Forms",
48
- "description": "WhatsApp native forms: build, publish on one or more numbers, send to a contact and read the answers."
45
+ "description": "WhatsApp native forms: build, publish on one or more numbers, send to a contact and read the answers.",
46
+ "defaultOperation": "whatsappForm.responses"
49
47
  },
50
48
  {
51
49
  "value": "tag",
52
50
  "name": "Tags",
53
- "description": "Tags to segment contacts."
51
+ "description": "Tags to segment contacts.",
52
+ "defaultOperation": "tag.index"
54
53
  },
55
54
  {
56
55
  "value": "customField",
57
56
  "name": "Custom Fields",
58
- "description": "Custom fields to store your own data on contacts."
57
+ "description": "Custom fields to store your own data on contacts.",
58
+ "defaultOperation": "customField.index"
59
59
  },
60
60
  {
61
61
  "value": "group",
62
62
  "name": "Groups",
63
- "description": "WhatsApp groups of the account and its campaigns: list them, send them a message, and see their participants, joins and leaves."
63
+ "description": "WhatsApp groups of the account and its campaigns: list them, send them a message, and see their participants, joins and leaves.",
64
+ "defaultOperation": "campaign.participantEvents"
64
65
  },
65
66
  {
66
67
  "value": "device",
67
68
  "name": "Numbers",
68
- "description": "The account's WhatsApp numbers: list them and their status, connect one by QR or with a connect link, and their health, queue, logs, username and profile."
69
+ "description": "The account's WhatsApp numbers: list them and their status, connect one by QR or with a connect link, and their health, queue, logs, username and profile.",
70
+ "defaultOperation": "deviceConnectionEvent.index"
69
71
  },
70
72
  {
71
73
  "value": "webhook",
72
74
  "name": "Webhooks",
73
- "description": "Webhook subscriptions and endpoints, the event catalog and the delivery history."
75
+ "description": "Webhook subscriptions and endpoints, the event catalog and the delivery history.",
76
+ "defaultOperation": "webhookSubscriptionDelivery.index"
74
77
  }
75
78
  ];
76
79
  exports.OPERATIONS = [
@@ -2112,7 +2115,7 @@ exports.OPERATIONS = [
2112
2115
  "method": "POST",
2113
2116
  "path": "/api/v1/message/send-message",
2114
2117
  "permission": "conversations:send",
2115
- "notice": "With an API key it answers 200 with the queued message (status queued) and its ID; the result comes later in the message.status_changed event. The WhatsApp guards apply: 24-hour window (422 window_closed), pace (429 rate_limited) and anti-blocking (422 antiblock_…).",
2118
+ "notice": "Say who receives it with Phone (with the country code): if it is not a contact of your account yet, it is created in your key's workspace (as Create or update a contact does, so the key needs conversations:write; without it, 403) and the message's contact_id comes in the answer. To a contact you already have, conversations:send is enough. A phone of a contact of another workspace answers 404. With Contact ID too, both have to be the same contact (422 recipient_mismatch). On an official number, the first message to a new contact has to be a template: a free message only goes out within 24 hours of the contact's last message. With an API key it answers 200 with the queued message (status queued) and its ID; the result comes later in the message.status_changed event. The WhatsApp guards apply: 24-hour window (422 window_closed), pace (429 rate_limited) and anti-blocking (422 antiblock_…); a contact created by the send stays even if a guard stops it.",
2116
2119
  "source": "spec",
2117
2120
  "body": {
2118
2121
  "required": true,
@@ -2129,15 +2132,27 @@ exports.OPERATIONS = [
2129
2132
  "description": "In the API: device_id.",
2130
2133
  "valueType": "integer"
2131
2134
  },
2135
+ {
2136
+ "name": "phone",
2137
+ "apiName": "phone",
2138
+ "location": "body",
2139
+ "required": false,
2140
+ "kind": "string",
2141
+ "displayName": "Phone",
2142
+ "description": "The recipient's phone with the country code, for example 5491122334455. No need to create the contact first: a new phone becomes a contact, which takes conversations:write. In the API: phone.",
2143
+ "valueType": "string",
2144
+ "topLevel": true
2145
+ },
2132
2146
  {
2133
2147
  "name": "contact_id",
2134
2148
  "apiName": "contact_id",
2135
2149
  "location": "body",
2136
- "required": true,
2150
+ "required": false,
2137
2151
  "kind": "number",
2138
2152
  "displayName": "Contact ID",
2139
- "description": "In the API: contact_id.",
2140
- "valueType": "integer"
2153
+ "description": "Optional: a contact you already have. With Phone or WhatsApp ID too, they have to be of this same contact. In the API: contact_id.",
2154
+ "valueType": "integer",
2155
+ "topLevel": true
2141
2156
  },
2142
2157
  {
2143
2158
  "name": "text",
@@ -2149,6 +2164,16 @@ exports.OPERATIONS = [
2149
2164
  "description": "In the API: text.",
2150
2165
  "valueType": "string"
2151
2166
  },
2167
+ {
2168
+ "name": "whatsapp_id",
2169
+ "apiName": "whatsapp_id",
2170
+ "location": "body",
2171
+ "required": false,
2172
+ "kind": "string",
2173
+ "displayName": "WhatsApp ID",
2174
+ "description": "Instead of Phone, on an official number only: the BSUID Meta sends (for example US.13491208655302741918). With a QR number it answers 422. In the API: whatsapp_id.",
2175
+ "valueType": "string"
2176
+ },
2152
2177
  {
2153
2178
  "name": "file",
2154
2179
  "apiName": "file",
@@ -3274,10 +3299,10 @@ exports.OPERATIONS = [
3274
3299
  "method": "POST",
3275
3300
  "path": "/api/v1/devices/{device}/templates/{template}/send-template",
3276
3301
  "permission": "conversations:send",
3277
- "notice": "With an API key it answers 200 with the queued message (status queued) and its ID; the result comes in the message.status_changed event. A template does not need the 24-hour window.",
3302
+ "notice": "Say who receives it with Phone (with the country code), always, with or without Contact ID: if it is not a contact of your account yet, it is created in your key's workspace (the key needs conversations:write for that; without it, 403) and the message's contact_id comes in the answer. To a contact you already have, conversations:send is enough. A phone of a contact of another workspace answers 404; Phone and Contact ID have to be the same contact (422 recipient_mismatch). With an API key it answers 200 with the queued message (status queued) and its ID; the result comes in the message.status_changed event. A template does not need the 24-hour window.",
3278
3303
  "source": "spec",
3279
3304
  "body": {
3280
- "required": true,
3305
+ "required": false,
3281
3306
  "root": "object"
3282
3307
  },
3283
3308
  "params": [
@@ -3305,21 +3330,33 @@ exports.OPERATIONS = [
3305
3330
  "name": "phone",
3306
3331
  "apiName": "phone",
3307
3332
  "location": "body",
3308
- "required": true,
3333
+ "required": false,
3309
3334
  "kind": "string",
3310
3335
  "displayName": "Phone",
3311
- "description": "In the API: phone.",
3312
- "valueType": "string"
3336
+ "description": "The recipient's phone with the country code, for example 5491122334455. No need to create the contact first: a new phone becomes a contact, which takes conversations:write. It goes always, with or without Contact ID. In the API: phone.",
3337
+ "valueType": "string",
3338
+ "topLevel": true
3313
3339
  },
3314
3340
  {
3315
3341
  "name": "contact_id",
3316
3342
  "apiName": "contact_id",
3317
3343
  "location": "body",
3318
- "required": true,
3344
+ "required": false,
3319
3345
  "kind": "number",
3320
3346
  "displayName": "Contact ID",
3321
- "description": "In the API: contact_id.",
3322
- "valueType": "integer"
3347
+ "description": "Optional: a contact you already have. With Phone or WhatsApp ID too, they have to be of this same contact. In the API: contact_id.",
3348
+ "valueType": "integer",
3349
+ "topLevel": true
3350
+ },
3351
+ {
3352
+ "name": "whatsapp_id",
3353
+ "apiName": "whatsapp_id",
3354
+ "location": "body",
3355
+ "required": false,
3356
+ "kind": "string",
3357
+ "displayName": "WhatsApp ID",
3358
+ "description": "Instead of Phone, on an official number only: the BSUID Meta sends (for example US.13491208655302741918). With a QR number it answers 422. In the API: whatsapp_id.",
3359
+ "valueType": "string"
3323
3360
  },
3324
3361
  {
3325
3362
  "name": "template_variables",
@@ -4753,6 +4790,7 @@ exports.OPERATIONS = [
4753
4790
  "method": "GET",
4754
4791
  "path": "/api/v1/devices/{device}/groups",
4755
4792
  "permission": "communities:read",
4793
+ "notice": "Read live from WhatsApp; with an API key the list is reused for one minute per number, so a group just created may take up to a minute to show. A group already in your account comes with its device_id; to follow one that is not, use Follow a group.",
4756
4794
  "source": "spec",
4757
4795
  "list": {
4758
4796
  "pagination": "page",
@@ -4913,6 +4951,43 @@ exports.OPERATIONS = [
4913
4951
  }
4914
4952
  ]
4915
4953
  },
4954
+ {
4955
+ "resource": "group",
4956
+ "value": "v2.apiGroupImport",
4957
+ "name": "Follow a group",
4958
+ "description": "Starts following a WhatsApp group of your number without writing to it: imports it into your account, and from then on you get who joins and who leaves. If it is already in your account, it is not imported again. Permission: communities:operate.",
4959
+ "method": "POST",
4960
+ "path": "/api/v1/groups/{group}/import",
4961
+ "permission": "communities:operate",
4962
+ "notice": "QR numbers only (an official number answers 422 provider_unsupported). It answers 201 when it imports the group and 200 when it was already in the account, with is_admin, read from WhatsApp in the same call. Needs communities:operate (403 import_permission_required). Up to 5 per number per minute (429 import_rate_limited, with Retry-After); a group of another number answers 404 group_not_found, one in another workspace of the account cannot be imported here. From then on the group sends the group_participant.joined and group_participant.left events.",
4963
+ "source": "spec",
4964
+ "body": {
4965
+ "required": true,
4966
+ "root": "object"
4967
+ },
4968
+ "params": [
4969
+ {
4970
+ "name": "group",
4971
+ "apiName": "group",
4972
+ "location": "path",
4973
+ "required": true,
4974
+ "kind": "string",
4975
+ "displayName": "Group ID",
4976
+ "description": "The group's ID on WhatsApp, as List the groups a number manages returns it. In the API: group.",
4977
+ "valueType": "string"
4978
+ },
4979
+ {
4980
+ "name": "device_id",
4981
+ "apiName": "device_id",
4982
+ "location": "body",
4983
+ "required": true,
4984
+ "kind": "number",
4985
+ "displayName": "Number ID",
4986
+ "description": "The QR number the group belongs to. In the API: device_id.",
4987
+ "valueType": "integer"
4988
+ }
4989
+ ]
4990
+ },
4916
4991
  {
4917
4992
  "resource": "group",
4918
4993
  "value": "group.show",
@@ -5076,6 +5151,73 @@ exports.OPERATIONS = [
5076
5151
  }
5077
5152
  ]
5078
5153
  },
5154
+ {
5155
+ "resource": "group",
5156
+ "value": "apiGroupAction.create",
5157
+ "name": "Create a group",
5158
+ "description": "Creates a WhatsApp group from one of your numbers, with up to 20 initial participants, a description and, on an official number, approval to join. Permission: communities:operate.",
5159
+ "method": "POST",
5160
+ "path": "/api/v1/groups",
5161
+ "permission": "communities:operate",
5162
+ "notice": "Asynchronous: it answers 202 with an action_id; read the outcome with \"Get a group action\" or the group_action.completed and group_action.failed events. The result brings the group and its invite link. join_approval_required only on an official number (a QR number answers 422 provider_unsupported), and it cannot be changed later.",
5163
+ "source": "spec",
5164
+ "body": {
5165
+ "required": true,
5166
+ "root": "object"
5167
+ },
5168
+ "params": [
5169
+ {
5170
+ "name": "device_id",
5171
+ "apiName": "device_id",
5172
+ "location": "body",
5173
+ "required": true,
5174
+ "kind": "number",
5175
+ "displayName": "Number ID",
5176
+ "description": "In the API: device_id.",
5177
+ "valueType": "integer"
5178
+ },
5179
+ {
5180
+ "name": "name",
5181
+ "apiName": "name",
5182
+ "location": "body",
5183
+ "required": true,
5184
+ "kind": "string",
5185
+ "displayName": "Name",
5186
+ "description": "In the API: name.",
5187
+ "valueType": "string"
5188
+ },
5189
+ {
5190
+ "name": "participants",
5191
+ "apiName": "participants",
5192
+ "location": "body",
5193
+ "required": true,
5194
+ "kind": "list",
5195
+ "displayName": "Participants",
5196
+ "description": "Separate the values with commas. In the API: participants.",
5197
+ "valueType": "string"
5198
+ },
5199
+ {
5200
+ "name": "description",
5201
+ "apiName": "description",
5202
+ "location": "body",
5203
+ "required": false,
5204
+ "kind": "string",
5205
+ "displayName": "Description",
5206
+ "description": "In the API: description.",
5207
+ "valueType": "string"
5208
+ },
5209
+ {
5210
+ "name": "join_approval_required",
5211
+ "apiName": "join_approval_required",
5212
+ "location": "body",
5213
+ "required": false,
5214
+ "kind": "boolean",
5215
+ "displayName": "Approval Required to Join",
5216
+ "description": "In the API: join_approval_required.",
5217
+ "valueType": "boolean"
5218
+ }
5219
+ ]
5220
+ },
5079
5221
  {
5080
5222
  "resource": "group",
5081
5223
  "value": "apiGroupAction.sendMessage",
@@ -5084,8 +5226,8 @@ exports.OPERATIONS = [
5084
5226
  "method": "POST",
5085
5227
  "path": "/api/v1/groups/{group}/messages",
5086
5228
  "permission": "communities:send",
5087
- "notice": "Asynchronous: it answers 202 with action_id and status queued. Read the outcome with \"Get a group action\" (result.message.uid is the message's ID in WhatsApp) or with the group_action.completed and group_action.failed events. With a QR number it goes out at the pace of low-speed scheduled messages; with an official number the 24-hour window and the number's quality are checked first.",
5088
- "source": "communities-v2.35.5",
5229
+ "notice": "Asynchronous: it answers 202 with action_id and status queued. Read the outcome with \"Get a group action\" (result.message.uid is the message's ID in WhatsApp) or with the group_action.completed and group_action.failed events. With a QR number it goes out at the pace of low-speed scheduled messages; with an official number the 24-hour window and the number's quality are checked first. A group that is not in your account yet (one of the number's live list) is imported first, as Follow a group does: that also needs communities:operate (403 import_permission_required) and counts in its 5 per minute; if the number is not an admin of the group nothing is imported and it answers 422 device_not_group_admin.",
5230
+ "source": "spec",
5089
5231
  "body": {
5090
5232
  "required": true,
5091
5233
  "root": "object"
@@ -5098,7 +5240,7 @@ exports.OPERATIONS = [
5098
5240
  "required": true,
5099
5241
  "kind": "string",
5100
5242
  "displayName": "Group UID",
5101
- "description": "The group's uid, as List groups returns it (for example 120363012345678901@g.us). In the API: group.",
5243
+ "description": "The group's uid: one of your groups (List groups) or of the number's live list (List the groups a number manages), which is imported first. In the API: group.",
5102
5244
  "valueType": "string"
5103
5245
  },
5104
5246
  {
@@ -5179,7 +5321,11 @@ exports.OPERATIONS = [
5179
5321
  "path": "/api/v1/groups/actions/{action}",
5180
5322
  "permission": "communities:read",
5181
5323
  "notice": "An action of another account or workspace answers 404 action_not_found, like one that does not exist.",
5182
- "source": "communities-v2.35.5",
5324
+ "source": "spec",
5325
+ "list": {
5326
+ "pagination": "none",
5327
+ "maxPageSize": 100
5328
+ },
5183
5329
  "params": [
5184
5330
  {
5185
5331
  "name": "action",
@@ -5193,6 +5339,583 @@ exports.OPERATIONS = [
5193
5339
  }
5194
5340
  ]
5195
5341
  },
5342
+ {
5343
+ "resource": "group",
5344
+ "value": "apiGroupAction.addParticipants",
5345
+ "name": "Add participants to a group",
5346
+ "description": "Adds up to 20 phones to a group, from a number that administers it. Permission: communities:operate.",
5347
+ "method": "POST",
5348
+ "path": "/api/v1/groups/{group}/participants",
5349
+ "permission": "communities:operate",
5350
+ "notice": "Asynchronous: it answers 202 with an action_id; read the outcome with \"Get a group action\" or the group_action.completed and group_action.failed events. With a QR number each phone is added one after the other, at the pace of campaigns. The result says added or failed for each person.",
5351
+ "source": "spec",
5352
+ "body": {
5353
+ "required": true,
5354
+ "root": "object"
5355
+ },
5356
+ "params": [
5357
+ {
5358
+ "name": "group",
5359
+ "apiName": "group",
5360
+ "location": "path",
5361
+ "required": true,
5362
+ "kind": "string",
5363
+ "displayName": "Group UID",
5364
+ "description": "In the API: group.",
5365
+ "valueType": "string"
5366
+ },
5367
+ {
5368
+ "name": "device_id",
5369
+ "apiName": "device_id",
5370
+ "location": "body",
5371
+ "required": true,
5372
+ "kind": "number",
5373
+ "displayName": "Number ID",
5374
+ "description": "In the API: device_id.",
5375
+ "valueType": "integer"
5376
+ },
5377
+ {
5378
+ "name": "phones",
5379
+ "apiName": "phones",
5380
+ "location": "body",
5381
+ "required": true,
5382
+ "kind": "list",
5383
+ "displayName": "Phones",
5384
+ "description": "Separate the values with commas. In the API: phones.",
5385
+ "valueType": "string"
5386
+ }
5387
+ ]
5388
+ },
5389
+ {
5390
+ "resource": "group",
5391
+ "value": "apiGroupAction.removeParticipants",
5392
+ "name": "Remove participants from a group",
5393
+ "description": "Removes up to 20 phones from a group in one WhatsApp operation. Permission: communities:operate.",
5394
+ "method": "POST",
5395
+ "path": "/api/v1/groups/{group}/participants/remove",
5396
+ "permission": "communities:operate",
5397
+ "notice": "Asynchronous: it answers 202 with an action_id; read the outcome with \"Get a group action\" or the group_action.completed and group_action.failed events. The phone of the number that runs it cannot be removed.",
5398
+ "source": "spec",
5399
+ "body": {
5400
+ "required": true,
5401
+ "root": "object"
5402
+ },
5403
+ "params": [
5404
+ {
5405
+ "name": "group",
5406
+ "apiName": "group",
5407
+ "location": "path",
5408
+ "required": true,
5409
+ "kind": "string",
5410
+ "displayName": "Group UID",
5411
+ "description": "In the API: group.",
5412
+ "valueType": "string"
5413
+ },
5414
+ {
5415
+ "name": "device_id",
5416
+ "apiName": "device_id",
5417
+ "location": "body",
5418
+ "required": true,
5419
+ "kind": "number",
5420
+ "displayName": "Number ID",
5421
+ "description": "In the API: device_id.",
5422
+ "valueType": "integer"
5423
+ },
5424
+ {
5425
+ "name": "phones",
5426
+ "apiName": "phones",
5427
+ "location": "body",
5428
+ "required": true,
5429
+ "kind": "list",
5430
+ "displayName": "Phones",
5431
+ "description": "Separate the values with commas. In the API: phones.",
5432
+ "valueType": "string"
5433
+ }
5434
+ ]
5435
+ },
5436
+ {
5437
+ "resource": "group",
5438
+ "value": "apiGroupAction.promoteAdmins",
5439
+ "name": "Make participants admins",
5440
+ "description": "Makes up to 20 phones admins of a group; a phone that is not in the group is added first. QR numbers only. Permission: communities:operate.",
5441
+ "method": "POST",
5442
+ "path": "/api/v1/groups/{group}/admins",
5443
+ "permission": "communities:operate",
5444
+ "notice": "Asynchronous: it answers 202 with an action_id; read the outcome with \"Get a group action\" or the group_action.completed and group_action.failed events. It runs at the pace of the number's campaigns.",
5445
+ "source": "spec",
5446
+ "body": {
5447
+ "required": true,
5448
+ "root": "object"
5449
+ },
5450
+ "params": [
5451
+ {
5452
+ "name": "group",
5453
+ "apiName": "group",
5454
+ "location": "path",
5455
+ "required": true,
5456
+ "kind": "string",
5457
+ "displayName": "Group UID",
5458
+ "description": "In the API: group.",
5459
+ "valueType": "string"
5460
+ },
5461
+ {
5462
+ "name": "device_id",
5463
+ "apiName": "device_id",
5464
+ "location": "body",
5465
+ "required": true,
5466
+ "kind": "number",
5467
+ "displayName": "Number ID",
5468
+ "description": "In the API: device_id.",
5469
+ "valueType": "integer"
5470
+ },
5471
+ {
5472
+ "name": "phones",
5473
+ "apiName": "phones",
5474
+ "location": "body",
5475
+ "required": true,
5476
+ "kind": "list",
5477
+ "displayName": "Phones",
5478
+ "description": "Separate the values with commas. In the API: phones.",
5479
+ "valueType": "string"
5480
+ }
5481
+ ]
5482
+ },
5483
+ {
5484
+ "resource": "group",
5485
+ "value": "apiGroupAction.demoteAdmins",
5486
+ "name": "Remove the admin role",
5487
+ "description": "Takes the admin role away from up to 20 phones of a group. QR numbers only. Permission: communities:operate.",
5488
+ "method": "POST",
5489
+ "path": "/api/v1/groups/{group}/admins/remove",
5490
+ "permission": "communities:operate",
5491
+ "notice": "Asynchronous: it answers 202 with an action_id; read the outcome with \"Get a group action\" or the group_action.completed and group_action.failed events. The phone of the number that runs it is not accepted. It runs at the pace of the number's campaigns.",
5492
+ "source": "spec",
5493
+ "body": {
5494
+ "required": true,
5495
+ "root": "object"
5496
+ },
5497
+ "params": [
5498
+ {
5499
+ "name": "group",
5500
+ "apiName": "group",
5501
+ "location": "path",
5502
+ "required": true,
5503
+ "kind": "string",
5504
+ "displayName": "Group UID",
5505
+ "description": "In the API: group.",
5506
+ "valueType": "string"
5507
+ },
5508
+ {
5509
+ "name": "device_id",
5510
+ "apiName": "device_id",
5511
+ "location": "body",
5512
+ "required": true,
5513
+ "kind": "number",
5514
+ "displayName": "Number ID",
5515
+ "description": "In the API: device_id.",
5516
+ "valueType": "integer"
5517
+ },
5518
+ {
5519
+ "name": "phones",
5520
+ "apiName": "phones",
5521
+ "location": "body",
5522
+ "required": true,
5523
+ "kind": "list",
5524
+ "displayName": "Phones",
5525
+ "description": "Separate the values with commas. In the API: phones.",
5526
+ "valueType": "string"
5527
+ }
5528
+ ]
5529
+ },
5530
+ {
5531
+ "resource": "group",
5532
+ "value": "apiGroupAction.updateName",
5533
+ "name": "Rename a group",
5534
+ "description": "Changes the name of a group in WhatsApp, as you send it (up to 100 characters, without campaign numbering). Permission: communities:operate.",
5535
+ "method": "PUT",
5536
+ "path": "/api/v1/groups/{group}/name",
5537
+ "permission": "communities:operate",
5538
+ "notice": "Asynchronous: it answers 202 with an action_id; read the outcome with \"Get a group action\" or the group_action.completed and group_action.failed events. It runs at the pace of the number's campaigns.",
5539
+ "source": "spec",
5540
+ "body": {
5541
+ "required": true,
5542
+ "root": "object"
5543
+ },
5544
+ "params": [
5545
+ {
5546
+ "name": "group",
5547
+ "apiName": "group",
5548
+ "location": "path",
5549
+ "required": true,
5550
+ "kind": "string",
5551
+ "displayName": "Group UID",
5552
+ "description": "In the API: group.",
5553
+ "valueType": "string"
5554
+ },
5555
+ {
5556
+ "name": "device_id",
5557
+ "apiName": "device_id",
5558
+ "location": "body",
5559
+ "required": true,
5560
+ "kind": "number",
5561
+ "displayName": "Number ID",
5562
+ "description": "In the API: device_id.",
5563
+ "valueType": "integer"
5564
+ },
5565
+ {
5566
+ "name": "name",
5567
+ "apiName": "name",
5568
+ "location": "body",
5569
+ "required": true,
5570
+ "kind": "string",
5571
+ "displayName": "Name",
5572
+ "description": "In the API: name.",
5573
+ "valueType": "string"
5574
+ }
5575
+ ]
5576
+ },
5577
+ {
5578
+ "resource": "group",
5579
+ "value": "apiGroupAction.updateDescription",
5580
+ "name": "Change a group's description",
5581
+ "description": "Changes the description of a group in WhatsApp (up to 2048 characters); an empty one removes it. Permission: communities:operate.",
5582
+ "method": "PUT",
5583
+ "path": "/api/v1/groups/{group}/description",
5584
+ "permission": "communities:operate",
5585
+ "notice": "Asynchronous: it answers 202 with an action_id; read the outcome with \"Get a group action\" or the group_action.completed and group_action.failed events. It runs at the pace of the number's campaigns.",
5586
+ "source": "spec",
5587
+ "body": {
5588
+ "required": true,
5589
+ "root": "object"
5590
+ },
5591
+ "params": [
5592
+ {
5593
+ "name": "group",
5594
+ "apiName": "group",
5595
+ "location": "path",
5596
+ "required": true,
5597
+ "kind": "string",
5598
+ "displayName": "Group UID",
5599
+ "description": "In the API: group.",
5600
+ "valueType": "string"
5601
+ },
5602
+ {
5603
+ "name": "device_id",
5604
+ "apiName": "device_id",
5605
+ "location": "body",
5606
+ "required": true,
5607
+ "kind": "number",
5608
+ "displayName": "Number ID",
5609
+ "description": "In the API: device_id.",
5610
+ "valueType": "integer"
5611
+ },
5612
+ {
5613
+ "name": "description",
5614
+ "apiName": "description",
5615
+ "location": "body",
5616
+ "required": true,
5617
+ "kind": "string",
5618
+ "displayName": "Description",
5619
+ "description": "In the API: description.",
5620
+ "valueType": "string"
5621
+ }
5622
+ ]
5623
+ },
5624
+ {
5625
+ "resource": "group",
5626
+ "value": "apiGroupAction.updatePhoto",
5627
+ "name": "Change a group's photo",
5628
+ "description": "Changes the photo of a group from an https URL of a jpg, jpeg or png image. QR numbers only. Permission: communities:operate.",
5629
+ "method": "PUT",
5630
+ "path": "/api/v1/groups/{group}/photo",
5631
+ "permission": "communities:operate",
5632
+ "notice": "Asynchronous: it answers 202 with an action_id; read the outcome with \"Get a group action\" or the group_action.completed and group_action.failed events. It runs at the pace of the number's campaigns.",
5633
+ "source": "spec",
5634
+ "body": {
5635
+ "required": true,
5636
+ "root": "object"
5637
+ },
5638
+ "params": [
5639
+ {
5640
+ "name": "group",
5641
+ "apiName": "group",
5642
+ "location": "path",
5643
+ "required": true,
5644
+ "kind": "string",
5645
+ "displayName": "Group UID",
5646
+ "description": "In the API: group.",
5647
+ "valueType": "string"
5648
+ },
5649
+ {
5650
+ "name": "device_id",
5651
+ "apiName": "device_id",
5652
+ "location": "body",
5653
+ "required": true,
5654
+ "kind": "number",
5655
+ "displayName": "Number ID",
5656
+ "description": "In the API: device_id.",
5657
+ "valueType": "integer"
5658
+ },
5659
+ {
5660
+ "name": "photo_url",
5661
+ "apiName": "photo_url",
5662
+ "location": "body",
5663
+ "required": true,
5664
+ "kind": "string",
5665
+ "displayName": "Photo URL",
5666
+ "description": "In the API: photo_url.",
5667
+ "valueType": "string"
5668
+ }
5669
+ ]
5670
+ },
5671
+ {
5672
+ "resource": "group",
5673
+ "value": "apiGroupAction.updateSettings",
5674
+ "name": "Change who can write in a group",
5675
+ "description": "Sets whether the members can send messages; blocking it also leaves only the admins editing the group's information. QR numbers only. Permission: communities:operate.",
5676
+ "method": "PUT",
5677
+ "path": "/api/v1/groups/{group}/settings",
5678
+ "permission": "communities:operate",
5679
+ "notice": "Asynchronous: it answers 202 with an action_id; read the outcome with \"Get a group action\" or the group_action.completed and group_action.failed events. It runs at the pace of the number's campaigns.",
5680
+ "source": "spec",
5681
+ "body": {
5682
+ "required": true,
5683
+ "root": "object"
5684
+ },
5685
+ "params": [
5686
+ {
5687
+ "name": "group",
5688
+ "apiName": "group",
5689
+ "location": "path",
5690
+ "required": true,
5691
+ "kind": "string",
5692
+ "displayName": "Group UID",
5693
+ "description": "In the API: group.",
5694
+ "valueType": "string"
5695
+ },
5696
+ {
5697
+ "name": "device_id",
5698
+ "apiName": "device_id",
5699
+ "location": "body",
5700
+ "required": true,
5701
+ "kind": "number",
5702
+ "displayName": "Number ID",
5703
+ "description": "In the API: device_id.",
5704
+ "valueType": "integer"
5705
+ },
5706
+ {
5707
+ "name": "members_can_send_messages",
5708
+ "apiName": "members_can_send_messages",
5709
+ "location": "body",
5710
+ "required": true,
5711
+ "kind": "boolean",
5712
+ "displayName": "Members Can Send Messages",
5713
+ "description": "In the API: members_can_send_messages.",
5714
+ "valueType": "boolean"
5715
+ }
5716
+ ]
5717
+ },
5718
+ {
5719
+ "resource": "group",
5720
+ "value": "apiGroupAction.renewInviteLink",
5721
+ "name": "Renew a group's invite link",
5722
+ "description": "Renews the invite link of a group: an official number revokes it and WhatsApp makes a new one; a QR number reads the current one again without revoking it. Permission: communities:operate.",
5723
+ "method": "POST",
5724
+ "path": "/api/v1/groups/{group}/invite-link/renew",
5725
+ "permission": "communities:operate",
5726
+ "notice": "Asynchronous: it answers 202 with an action_id; read the outcome with \"Get a group action\" or the group_action.completed and group_action.failed events. The result brings invite_link.",
5727
+ "source": "spec",
5728
+ "body": {
5729
+ "required": true,
5730
+ "root": "object"
5731
+ },
5732
+ "params": [
5733
+ {
5734
+ "name": "group",
5735
+ "apiName": "group",
5736
+ "location": "path",
5737
+ "required": true,
5738
+ "kind": "string",
5739
+ "displayName": "Group UID",
5740
+ "description": "In the API: group.",
5741
+ "valueType": "string"
5742
+ },
5743
+ {
5744
+ "name": "device_id",
5745
+ "apiName": "device_id",
5746
+ "location": "body",
5747
+ "required": true,
5748
+ "kind": "number",
5749
+ "displayName": "Number ID",
5750
+ "description": "In the API: device_id.",
5751
+ "valueType": "integer"
5752
+ }
5753
+ ]
5754
+ },
5755
+ {
5756
+ "resource": "group",
5757
+ "value": "apiGroupAction.inviteLink",
5758
+ "name": "Get a group's live invite link",
5759
+ "description": "Gets the current invite link of a group, read live from WhatsApp with the number given in Number ID. Permission: communities:read.",
5760
+ "method": "GET",
5761
+ "path": "/api/v1/groups/{group}/invite-link/live",
5762
+ "permission": "communities:read",
5763
+ "notice": "Up to 30 requests per minute.",
5764
+ "source": "spec",
5765
+ "params": [
5766
+ {
5767
+ "name": "group",
5768
+ "apiName": "group",
5769
+ "location": "path",
5770
+ "required": true,
5771
+ "kind": "string",
5772
+ "displayName": "Group UID",
5773
+ "description": "In the API: group.",
5774
+ "valueType": "string"
5775
+ },
5776
+ {
5777
+ "name": "device_id",
5778
+ "apiName": "device_id",
5779
+ "location": "query",
5780
+ "required": true,
5781
+ "kind": "number",
5782
+ "displayName": "Number ID",
5783
+ "description": "In the API: device_id.",
5784
+ "valueType": "integer"
5785
+ }
5786
+ ]
5787
+ },
5788
+ {
5789
+ "resource": "group",
5790
+ "value": "apiGroupAction.joinRequests",
5791
+ "name": "List a group's join requests",
5792
+ "description": "Lists the pending requests to join a group (up to 100, in WhatsApp's order), read live with the number given in Number ID. Permission: communities:read.",
5793
+ "method": "GET",
5794
+ "path": "/api/v1/groups/{group}/join-requests",
5795
+ "permission": "communities:read",
5796
+ "notice": "Official numbers with the official API groups beta only: a QR number answers 422 provider_unsupported. Requests without a phone are left out. Up to 30 requests per minute.",
5797
+ "source": "spec",
5798
+ "list": {
5799
+ "pagination": "none",
5800
+ "maxPageSize": 100
5801
+ },
5802
+ "params": [
5803
+ {
5804
+ "name": "group",
5805
+ "apiName": "group",
5806
+ "location": "path",
5807
+ "required": true,
5808
+ "kind": "string",
5809
+ "displayName": "Group UID",
5810
+ "description": "In the API: group.",
5811
+ "valueType": "string"
5812
+ },
5813
+ {
5814
+ "name": "device_id",
5815
+ "apiName": "device_id",
5816
+ "location": "query",
5817
+ "required": true,
5818
+ "kind": "number",
5819
+ "displayName": "Number ID",
5820
+ "description": "In the API: device_id.",
5821
+ "valueType": "integer"
5822
+ }
5823
+ ]
5824
+ },
5825
+ {
5826
+ "resource": "group",
5827
+ "value": "apiGroupAction.approveJoinRequests",
5828
+ "name": "Approve join requests",
5829
+ "description": "Approves pending requests to join a group, for the given phones, if they fit in the free places of the group (capacity_full otherwise). Permission: communities:operate.",
5830
+ "method": "POST",
5831
+ "path": "/api/v1/groups/{group}/join-requests/approve",
5832
+ "permission": "communities:operate",
5833
+ "notice": "Asynchronous: it answers 202 with an action_id; read the outcome with \"Get a group action\" or the group_action.completed and group_action.failed events. Official numbers with the official API groups beta and decisions enabled only; otherwise 422 provider_unsupported. The result is per person.",
5834
+ "source": "spec",
5835
+ "body": {
5836
+ "required": true,
5837
+ "root": "object"
5838
+ },
5839
+ "params": [
5840
+ {
5841
+ "name": "group",
5842
+ "apiName": "group",
5843
+ "location": "path",
5844
+ "required": true,
5845
+ "kind": "string",
5846
+ "displayName": "Group UID",
5847
+ "description": "In the API: group.",
5848
+ "valueType": "string"
5849
+ },
5850
+ {
5851
+ "name": "device_id",
5852
+ "apiName": "device_id",
5853
+ "location": "body",
5854
+ "required": true,
5855
+ "kind": "number",
5856
+ "displayName": "Number ID",
5857
+ "description": "In the API: device_id.",
5858
+ "valueType": "integer"
5859
+ },
5860
+ {
5861
+ "name": "phones",
5862
+ "apiName": "phones",
5863
+ "location": "body",
5864
+ "required": true,
5865
+ "kind": "list",
5866
+ "displayName": "Phones",
5867
+ "description": "Separate the values with commas. In the API: phones.",
5868
+ "valueType": "string"
5869
+ }
5870
+ ]
5871
+ },
5872
+ {
5873
+ "resource": "group",
5874
+ "value": "apiGroupAction.rejectJoinRequests",
5875
+ "name": "Reject join requests",
5876
+ "description": "Rejects pending requests to join a group, for the given phones. Permission: communities:operate.",
5877
+ "method": "POST",
5878
+ "path": "/api/v1/groups/{group}/join-requests/reject",
5879
+ "permission": "communities:operate",
5880
+ "notice": "Asynchronous: it answers 202 with an action_id; read the outcome with \"Get a group action\" or the group_action.completed and group_action.failed events. Official numbers with the official API groups beta and decisions enabled only; otherwise 422 provider_unsupported. The result is per person.",
5881
+ "source": "spec",
5882
+ "body": {
5883
+ "required": true,
5884
+ "root": "object"
5885
+ },
5886
+ "params": [
5887
+ {
5888
+ "name": "group",
5889
+ "apiName": "group",
5890
+ "location": "path",
5891
+ "required": true,
5892
+ "kind": "string",
5893
+ "displayName": "Group UID",
5894
+ "description": "In the API: group.",
5895
+ "valueType": "string"
5896
+ },
5897
+ {
5898
+ "name": "device_id",
5899
+ "apiName": "device_id",
5900
+ "location": "body",
5901
+ "required": true,
5902
+ "kind": "number",
5903
+ "displayName": "Number ID",
5904
+ "description": "In the API: device_id.",
5905
+ "valueType": "integer"
5906
+ },
5907
+ {
5908
+ "name": "phones",
5909
+ "apiName": "phones",
5910
+ "location": "body",
5911
+ "required": true,
5912
+ "kind": "list",
5913
+ "displayName": "Phones",
5914
+ "description": "Separate the values with commas. In the API: phones.",
5915
+ "valueType": "string"
5916
+ }
5917
+ ]
5918
+ },
5196
5919
  {
5197
5920
  "resource": "group",
5198
5921
  "value": "campaign.participants",