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

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,21 +3,26 @@ 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": "8bbbae569b4cab520884db98f28204156c1bd6c629578bee609343c193e0dadb",
6
+ "sha256": "0f451feaba59418f3a556f58856f841f12570973fd6525103e8cc0128ab64374",
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
  {
10
- "id": "accounts-webhook-subscriptions",
11
- "source": "accounts tag v1.4.24 @ 300cc8435e6fa17e2ac274b88289a2cc7b945fcd (2026-10-22 08:31 -03:00, the one running in production), read only",
12
- "used": 7,
10
+ "id": "conversations-forms",
11
+ "source": "conversations tag v1.18.10 @ a580a3d0020c98d9777c4f05437454c52af7ee55, written on 2026-10-22; checked again on 2026-11-04 against tag v1.19.7 @ 4e35ddb835249d37576597cc9a965c3e16ccb6d2 (the one running in production): bodies and responses did not change, read only",
12
+ "used": 18,
13
13
  "ignored": 0
14
14
  },
15
15
  {
16
- "id": "conversations-v1.18.10",
17
- "source": "conversations tag v1.18.10 @ a580a3d0020c98d9777c4f05437454c52af7ee55 (2026-10-22 01:29 -05:00, the one running in production), read only",
18
- "used": 20,
19
- "ignored": 0,
20
- "replaced": 5
16
+ "id": "conversations-kept-2026-10-15",
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
+ "used": 2,
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
21
26
  }
22
27
  ]
23
28
  };
@@ -55,12 +60,12 @@ exports.RESOURCES = [
55
60
  {
56
61
  "value": "group",
57
62
  "name": "Groups",
58
- "description": "WhatsApp groups of the account and its campaigns, with 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."
59
64
  },
60
65
  {
61
66
  "value": "device",
62
67
  "name": "Numbers",
63
- "description": "The account's WhatsApp numbers: status, health, queue, logs, username and profile."
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."
64
69
  },
65
70
  {
66
71
  "value": "webhook",
@@ -1428,6 +1433,46 @@ exports.OPERATIONS = [
1428
1433
  "description": "In the API: metaWindowDeviceIds.",
1429
1434
  "valueType": "string"
1430
1435
  },
1436
+ {
1437
+ "name": "lastMessageDateFrom",
1438
+ "apiName": "lastMessageDateFrom",
1439
+ "location": "query",
1440
+ "required": false,
1441
+ "kind": "dateTime",
1442
+ "displayName": "lastMessageDateFrom",
1443
+ "description": "In the API: lastMessageDateFrom.",
1444
+ "format": "date"
1445
+ },
1446
+ {
1447
+ "name": "lastMessageDateTo",
1448
+ "apiName": "lastMessageDateTo",
1449
+ "location": "query",
1450
+ "required": false,
1451
+ "kind": "dateTime",
1452
+ "displayName": "lastMessageDateTo",
1453
+ "description": "In the API: lastMessageDateTo.",
1454
+ "format": "date"
1455
+ },
1456
+ {
1457
+ "name": "timezone",
1458
+ "apiName": "timezone",
1459
+ "location": "query",
1460
+ "required": false,
1461
+ "kind": "string",
1462
+ "displayName": "Time Zone",
1463
+ "description": "In the API: timezone.",
1464
+ "valueType": "string"
1465
+ },
1466
+ {
1467
+ "name": "customFieldFilters",
1468
+ "apiName": "customFieldFilters",
1469
+ "location": "query",
1470
+ "required": false,
1471
+ "kind": "string",
1472
+ "displayName": "customFieldFilters",
1473
+ "description": "In the API: customFieldFilters.",
1474
+ "valueType": "string"
1475
+ },
1431
1476
  {
1432
1477
  "name": "orderBy",
1433
1478
  "apiName": "orderBy",
@@ -1483,6 +1528,16 @@ exports.OPERATIONS = [
1483
1528
  "displayName": "Own and Unassigned",
1484
1529
  "description": "In the API: ownAndUnassigned.",
1485
1530
  "valueType": "boolean"
1531
+ },
1532
+ {
1533
+ "name": "withMine",
1534
+ "apiName": "withMine",
1535
+ "location": "query",
1536
+ "required": false,
1537
+ "kind": "boolean",
1538
+ "displayName": "withMine",
1539
+ "description": "In the API: withMine.",
1540
+ "valueType": "boolean"
1486
1541
  }
1487
1542
  ]
1488
1543
  },
@@ -1829,7 +1884,7 @@ exports.OPERATIONS = [
1829
1884
  "path": "/api/v1/contacts/{contact}/message",
1830
1885
  "permission": "conversations:send",
1831
1886
  "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_…). With an API key, Phone or WhatsApp ID is required and must be the contact's (otherwise 422 recipient_mismatch). If the account is in the 24-hour lockout for monthly active contacts, 429 mac_lockout_24h.",
1832
- "source": "conversations-v1.18.10",
1887
+ "source": "spec",
1833
1888
  "body": {
1834
1889
  "required": true,
1835
1890
  "root": "object"
@@ -1905,6 +1960,33 @@ exports.OPERATIONS = [
1905
1960
  "description": "http(s) URL of the file (also signed or without an extension, with File Type) or the name of an already uploaded file. In the API: file.",
1906
1961
  "valueType": "string"
1907
1962
  },
1963
+ {
1964
+ "name": "file_type",
1965
+ "apiName": "file_type",
1966
+ "location": "body",
1967
+ "required": false,
1968
+ "kind": "options",
1969
+ "displayName": "File Type",
1970
+ "description": "What the file is, when File is a URL that does not show its extension (for example a signed URL). Without it, such a URL answers 422 on file_type. In the API: file_type.",
1971
+ "valueType": "string",
1972
+ "options": [
1973
+ "image",
1974
+ "video",
1975
+ "audio",
1976
+ "document",
1977
+ "sticker"
1978
+ ]
1979
+ },
1980
+ {
1981
+ "name": "file_name",
1982
+ "apiName": "file_name",
1983
+ "location": "body",
1984
+ "required": false,
1985
+ "kind": "string",
1986
+ "displayName": "File Name",
1987
+ "description": "Name the document arrives with (without / \\ ? #). Needed for a document whose URL does not end in a known extension. In the API: file_name.",
1988
+ "valueType": "string"
1989
+ },
1908
1990
  {
1909
1991
  "name": "temporal_uuid",
1910
1992
  "apiName": "temporal_uuid",
@@ -1925,6 +2007,16 @@ exports.OPERATIONS = [
1925
2007
  "description": "In the API: note.",
1926
2008
  "valueType": "boolean"
1927
2009
  },
2010
+ {
2011
+ "name": "mentions",
2012
+ "apiName": "mentions",
2013
+ "location": "body",
2014
+ "required": false,
2015
+ "kind": "list",
2016
+ "displayName": "mentions",
2017
+ "description": "Separate the values with commas. In the API: mentions.",
2018
+ "valueType": "integer"
2019
+ },
1928
2020
  {
1929
2021
  "name": "options",
1930
2022
  "apiName": "options",
@@ -1944,6 +2036,16 @@ exports.OPERATIONS = [
1944
2036
  "description": "In the API: reference_message_uid.",
1945
2037
  "valueType": "string"
1946
2038
  },
2039
+ {
2040
+ "name": "client_reference",
2041
+ "apiName": "client_reference",
2042
+ "location": "body",
2043
+ "required": false,
2044
+ "kind": "string",
2045
+ "displayName": "Client Reference",
2046
+ "description": "Your own identifier for this send (1 to 64 visible ASCII characters, no spaces). It comes back in the message and in the message.status_changed event, to match them with your system. In the API: client_reference.",
2047
+ "valueType": "string"
2048
+ },
1947
2049
  {
1948
2050
  "name": "link_preview",
1949
2051
  "apiName": "link_preview",
@@ -1962,43 +2064,6 @@ exports.OPERATIONS = [
1962
2064
  "kind": "json",
1963
2065
  "displayName": "Link Preview Data",
1964
2066
  "description": "In the API: link_preview_meta."
1965
- },
1966
- {
1967
- "name": "file_type",
1968
- "apiName": "file_type",
1969
- "location": "body",
1970
- "required": false,
1971
- "kind": "options",
1972
- "displayName": "File Type",
1973
- "description": "What the file is, when File is a URL that does not show its extension (for example a signed URL). Without it, such a URL answers 422 on file_type. In the API: file_type.",
1974
- "valueType": "string",
1975
- "options": [
1976
- "image",
1977
- "video",
1978
- "audio",
1979
- "document",
1980
- "sticker"
1981
- ]
1982
- },
1983
- {
1984
- "name": "file_name",
1985
- "apiName": "file_name",
1986
- "location": "body",
1987
- "required": false,
1988
- "kind": "string",
1989
- "displayName": "File Name",
1990
- "description": "Name the document arrives with (without / \\ ? #). Needed for a document whose URL does not end in a known extension. In the API: file_name.",
1991
- "valueType": "string"
1992
- },
1993
- {
1994
- "name": "client_reference",
1995
- "apiName": "client_reference",
1996
- "location": "body",
1997
- "required": false,
1998
- "kind": "string",
1999
- "displayName": "Client Reference",
2000
- "description": "Your own identifier for this send (1 to 64 visible ASCII characters, no spaces). It comes back in the message and in the message.status_changed event, to match them with your system. In the API: client_reference.",
2001
- "valueType": "string"
2002
2067
  }
2003
2068
  ]
2004
2069
  },
@@ -2048,7 +2113,7 @@ exports.OPERATIONS = [
2048
2113
  "path": "/api/v1/message/send-message",
2049
2114
  "permission": "conversations:send",
2050
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_…).",
2051
- "source": "conversations-v1.18.10",
2116
+ "source": "spec",
2052
2117
  "body": {
2053
2118
  "required": true,
2054
2119
  "root": "object"
@@ -2094,6 +2159,33 @@ exports.OPERATIONS = [
2094
2159
  "description": "http(s) URL of the file (also signed or without an extension, with File Type) or the name of an already uploaded file. In the API: file.",
2095
2160
  "valueType": "string"
2096
2161
  },
2162
+ {
2163
+ "name": "file_type",
2164
+ "apiName": "file_type",
2165
+ "location": "body",
2166
+ "required": false,
2167
+ "kind": "options",
2168
+ "displayName": "File Type",
2169
+ "description": "What the file is, when File is a URL that does not show its extension (for example a signed URL). Without it, such a URL answers 422 on file_type. In the API: file_type.",
2170
+ "valueType": "string",
2171
+ "options": [
2172
+ "image",
2173
+ "video",
2174
+ "audio",
2175
+ "document",
2176
+ "sticker"
2177
+ ]
2178
+ },
2179
+ {
2180
+ "name": "file_name",
2181
+ "apiName": "file_name",
2182
+ "location": "body",
2183
+ "required": false,
2184
+ "kind": "string",
2185
+ "displayName": "File Name",
2186
+ "description": "Name the document arrives with (without / \\ ? #). Needed for a document whose URL does not end in a known extension. In the API: file_name.",
2187
+ "valueType": "string"
2188
+ },
2097
2189
  {
2098
2190
  "name": "temporal_uuid",
2099
2191
  "apiName": "temporal_uuid",
@@ -2125,31 +2217,14 @@ exports.OPERATIONS = [
2125
2217
  "valueType": "boolean"
2126
2218
  },
2127
2219
  {
2128
- "name": "file_type",
2129
- "apiName": "file_type",
2130
- "location": "body",
2131
- "required": false,
2132
- "kind": "options",
2133
- "displayName": "File Type",
2134
- "description": "What the file is, when File is a URL that does not show its extension (for example a signed URL). Without it, such a URL answers 422 on file_type. In the API: file_type.",
2135
- "valueType": "string",
2136
- "options": [
2137
- "image",
2138
- "video",
2139
- "audio",
2140
- "document",
2141
- "sticker"
2142
- ]
2143
- },
2144
- {
2145
- "name": "file_name",
2146
- "apiName": "file_name",
2220
+ "name": "mentions",
2221
+ "apiName": "mentions",
2147
2222
  "location": "body",
2148
2223
  "required": false,
2149
- "kind": "string",
2150
- "displayName": "File Name",
2151
- "description": "Name the document arrives with (without / \\ ? #). Needed for a document whose URL does not end in a known extension. In the API: file_name.",
2152
- "valueType": "string"
2224
+ "kind": "list",
2225
+ "displayName": "mentions",
2226
+ "description": "Separate the values with commas. In the API: mentions.",
2227
+ "valueType": "integer"
2153
2228
  },
2154
2229
  {
2155
2230
  "name": "client_reference",
@@ -2163,38 +2238,6 @@ exports.OPERATIONS = [
2163
2238
  }
2164
2239
  ]
2165
2240
  },
2166
- {
2167
- "resource": "conversation",
2168
- "value": "showMessage",
2169
- "name": "Get a message",
2170
- "description": "Use it to check the status of a message by its ID (the one the send returned): queued, sent, delivered, read or failed, with the error and your client_reference. Permission: conversations:read.",
2171
- "method": "GET",
2172
- "path": "/api/v1/contacts/{contact}/messages/{message}",
2173
- "permission": "conversations:read",
2174
- "source": "conversations-v1.18.10",
2175
- "params": [
2176
- {
2177
- "name": "contact",
2178
- "apiName": "contact",
2179
- "location": "path",
2180
- "required": true,
2181
- "kind": "string",
2182
- "displayName": "Contact ID",
2183
- "description": "Contact of the message. In the API: contact.",
2184
- "valueType": "integer"
2185
- },
2186
- {
2187
- "name": "message",
2188
- "apiName": "message",
2189
- "location": "path",
2190
- "required": true,
2191
- "kind": "string",
2192
- "displayName": "Message ID",
2193
- "description": "Message ID. In the API: message.",
2194
- "valueType": "integer"
2195
- }
2196
- ]
2197
- },
2198
2241
  {
2199
2242
  "resource": "conversation",
2200
2243
  "value": "messageReaction.update",
@@ -2284,7 +2327,7 @@ exports.OPERATIONS = [
2284
2327
  "path": "/api/v1/contacts/{contact}/messages/{message}/forward",
2285
2328
  "permission": "conversations:send",
2286
2329
  "notice": "With an API key it answers 200 with one result per target: queued with its message, or blocked with the reason.",
2287
- "source": "conversations-v1.18.10",
2330
+ "source": "spec",
2288
2331
  "body": {
2289
2332
  "required": true,
2290
2333
  "root": "object"
@@ -2339,8 +2382,8 @@ exports.OPERATIONS = [
2339
2382
  "method": "POST",
2340
2383
  "path": "/api/v1/contacts/{contact}/message/poll",
2341
2384
  "permission": "conversations:send",
2342
- "notice": "Not open to API keys in conversations v1.18.10 (outside the allowed list of config/platform-gate.php): a key gets 403 route_not_available.",
2343
- "source": "spec",
2385
+ "notice": "Not open to API keys in conversations v1.19.7 (outside the allowed list of config/platform-gate.php): a key gets 403 route_not_available.",
2386
+ "source": "conversations-kept-2026-10-15",
2344
2387
  "body": {
2345
2388
  "required": true,
2346
2389
  "root": "object"
@@ -2406,8 +2449,8 @@ exports.OPERATIONS = [
2406
2449
  "method": "POST",
2407
2450
  "path": "/api/v1/contacts/{contact}/message/event",
2408
2451
  "permission": "conversations:send",
2409
- "notice": "Not open to API keys in conversations v1.18.10 (outside the allowed list of config/platform-gate.php): a key gets 403 route_not_available.",
2410
- "source": "spec",
2452
+ "notice": "Not open to API keys in conversations v1.19.7 (outside the allowed list of config/platform-gate.php): a key gets 403 route_not_available.",
2453
+ "source": "conversations-kept-2026-10-15",
2411
2454
  "body": {
2412
2455
  "required": true,
2413
2456
  "root": "object"
@@ -2484,7 +2527,7 @@ exports.OPERATIONS = [
2484
2527
  "path": "/api/v1/contacts/{contact}/message/contact-card",
2485
2528
  "permission": "conversations:send",
2486
2529
  "notice": "With an API key it answers 200 with one queued message per card (status queued); 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_…).",
2487
- "source": "conversations-v1.18.10",
2530
+ "source": "spec",
2488
2531
  "body": {
2489
2532
  "required": true,
2490
2533
  "root": "object"
@@ -2533,48 +2576,149 @@ exports.OPERATIONS = [
2533
2576
  ]
2534
2577
  },
2535
2578
  {
2536
- "resource": "template",
2537
- "value": "messageTemplate.templates",
2538
- "name": "List templates",
2539
- "description": "Use it to list your WhatsApp templates with their approval status, category, language and number, and pick the one to use in a send or a broadcast. Permission: conversations:read.",
2579
+ "resource": "conversation",
2580
+ "value": "showMessage",
2581
+ "operationId": "message.showMessage",
2582
+ "name": "Get a message",
2583
+ "description": "Use it to check the status of a message by its ID (the one the send returned): queued, sent, delivered, read or failed, with the error and your client_reference. Permission: conversations:read.",
2540
2584
  "method": "GET",
2541
- "path": "/api/v1/templates",
2585
+ "path": "/api/v1/contacts/{contact}/messages/{message}",
2542
2586
  "permission": "conversations:read",
2543
2587
  "source": "spec",
2544
- "list": {
2545
- "pagination": "page",
2546
- "sizeParam": "perPage",
2547
- "maxPageSize": 100
2548
- },
2549
2588
  "params": [
2550
2589
  {
2551
- "name": "name",
2552
- "apiName": "name",
2553
- "location": "query",
2554
- "required": false,
2555
- "kind": "string",
2556
- "displayName": "Name",
2557
- "description": "In the API: name.",
2558
- "valueType": "string"
2559
- },
2560
- {
2561
- "name": "uid",
2562
- "apiName": "uid",
2563
- "location": "query",
2564
- "required": false,
2590
+ "name": "contact",
2591
+ "apiName": "contact",
2592
+ "location": "path",
2593
+ "required": true,
2565
2594
  "kind": "string",
2566
- "displayName": "UID",
2567
- "description": "In the API: uid.",
2568
- "valueType": "string"
2595
+ "displayName": "Contact ID",
2596
+ "description": "Contact of the message. In the API: contact.",
2597
+ "valueType": "integer"
2569
2598
  },
2570
2599
  {
2571
- "name": "language_code",
2572
- "apiName": "language_code",
2573
- "location": "query",
2574
- "required": false,
2600
+ "name": "message",
2601
+ "apiName": "message",
2602
+ "location": "path",
2603
+ "required": true,
2575
2604
  "kind": "string",
2576
- "displayName": "Language",
2577
- "description": "In the API: language_code.",
2605
+ "displayName": "Message ID",
2606
+ "description": "Message ID. In the API: message.",
2607
+ "valueType": "integer"
2608
+ }
2609
+ ]
2610
+ },
2611
+ {
2612
+ "resource": "conversation",
2613
+ "value": "message.markMessageRead",
2614
+ "name": "Mark a message as read",
2615
+ "description": "Marks a message the contact sent you as read on WhatsApp (the contact sees the blue ticks), and updates the conversation's unread state as the panel does. Permission: conversations:send.",
2616
+ "method": "POST",
2617
+ "path": "/api/v1/contacts/{contact}/messages/{message}/read",
2618
+ "permission": "conversations:send",
2619
+ "source": "spec",
2620
+ "params": [
2621
+ {
2622
+ "name": "contact",
2623
+ "apiName": "contact",
2624
+ "location": "path",
2625
+ "required": true,
2626
+ "kind": "string",
2627
+ "displayName": "Contact ID",
2628
+ "description": "In the API: contact.",
2629
+ "valueType": "integer"
2630
+ },
2631
+ {
2632
+ "name": "message",
2633
+ "apiName": "message",
2634
+ "location": "path",
2635
+ "required": true,
2636
+ "kind": "string",
2637
+ "displayName": "Message ID",
2638
+ "description": "In the API: message.",
2639
+ "valueType": "integer"
2640
+ }
2641
+ ]
2642
+ },
2643
+ {
2644
+ "resource": "conversation",
2645
+ "value": "message.typingIndicator",
2646
+ "name": "Show \"typing…\" to a contact",
2647
+ "description": "Shows the contact that you are typing, on their latest message, for example while your system prepares the answer. Only WhatsApp Cloud numbers. Permission: conversations:send.",
2648
+ "method": "POST",
2649
+ "path": "/api/v1/contacts/{contact}/typing",
2650
+ "permission": "conversations:send",
2651
+ "source": "spec",
2652
+ "body": {
2653
+ "required": false,
2654
+ "root": "object"
2655
+ },
2656
+ "params": [
2657
+ {
2658
+ "name": "contact",
2659
+ "apiName": "contact",
2660
+ "location": "path",
2661
+ "required": true,
2662
+ "kind": "string",
2663
+ "displayName": "Contact ID",
2664
+ "description": "In the API: contact.",
2665
+ "valueType": "integer"
2666
+ },
2667
+ {
2668
+ "name": "device_id",
2669
+ "apiName": "device_id",
2670
+ "location": "body",
2671
+ "required": false,
2672
+ "kind": "number",
2673
+ "displayName": "Number ID",
2674
+ "description": "In the API: device_id.",
2675
+ "valueType": "integer"
2676
+ }
2677
+ ]
2678
+ },
2679
+ {
2680
+ "resource": "template",
2681
+ "value": "messageTemplate.templates",
2682
+ "name": "List templates",
2683
+ "description": "Use it to list your WhatsApp templates with their approval status, category, language and number, and pick the one to use in a send or a broadcast. Permission: conversations:read.",
2684
+ "method": "GET",
2685
+ "path": "/api/v1/templates",
2686
+ "permission": "conversations:read",
2687
+ "source": "spec",
2688
+ "list": {
2689
+ "pagination": "page",
2690
+ "sizeParam": "perPage",
2691
+ "maxPageSize": 100
2692
+ },
2693
+ "params": [
2694
+ {
2695
+ "name": "name",
2696
+ "apiName": "name",
2697
+ "location": "query",
2698
+ "required": false,
2699
+ "kind": "string",
2700
+ "displayName": "Name",
2701
+ "description": "In the API: name.",
2702
+ "valueType": "string"
2703
+ },
2704
+ {
2705
+ "name": "uid",
2706
+ "apiName": "uid",
2707
+ "location": "query",
2708
+ "required": false,
2709
+ "kind": "string",
2710
+ "displayName": "UID",
2711
+ "description": "In the API: uid.",
2712
+ "valueType": "string"
2713
+ },
2714
+ {
2715
+ "name": "language_code",
2716
+ "apiName": "language_code",
2717
+ "location": "query",
2718
+ "required": false,
2719
+ "kind": "string",
2720
+ "displayName": "Language",
2721
+ "description": "In the API: language_code.",
2578
2722
  "valueType": "string"
2579
2723
  },
2580
2724
  {
@@ -2644,6 +2788,36 @@ exports.OPERATIONS = [
2644
2788
  "description": "In the API: created_by_webhook.",
2645
2789
  "valueType": "boolean"
2646
2790
  },
2791
+ {
2792
+ "name": "quality",
2793
+ "apiName": "quality[]",
2794
+ "location": "query",
2795
+ "required": false,
2796
+ "kind": "multiOptions",
2797
+ "displayName": "quality[]",
2798
+ "description": "In the API: quality[].",
2799
+ "valueType": "string",
2800
+ "options": [
2801
+ "GREEN",
2802
+ "YELLOW",
2803
+ "RED",
2804
+ "UNKNOWN",
2805
+ "NOT_APPLICABLE"
2806
+ ]
2807
+ },
2808
+ {
2809
+ "name": "include",
2810
+ "apiName": "include",
2811
+ "location": "query",
2812
+ "required": false,
2813
+ "kind": "options",
2814
+ "displayName": "include",
2815
+ "description": "In the API: include.",
2816
+ "valueType": "string",
2817
+ "options": [
2818
+ "quality_counts"
2819
+ ]
2820
+ },
2647
2821
  {
2648
2822
  "name": "orderBy",
2649
2823
  "apiName": "orderBy",
@@ -3101,7 +3275,7 @@ exports.OPERATIONS = [
3101
3275
  "path": "/api/v1/devices/{device}/templates/{template}/send-template",
3102
3276
  "permission": "conversations:send",
3103
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.",
3104
- "source": "conversations-v1.18.10",
3278
+ "source": "spec",
3105
3279
  "body": {
3106
3280
  "required": true,
3107
3281
  "root": "object"
@@ -3200,6 +3374,48 @@ exports.OPERATIONS = [
3200
3374
  }
3201
3375
  ]
3202
3376
  },
3377
+ {
3378
+ "resource": "template",
3379
+ "value": "message.templateMetrics",
3380
+ "name": "Get a template's metrics",
3381
+ "description": "Gets what Meta reports for a template of an official number, day by day (UTC) and in total: sent, delivered and read, clicks per button and, when Meta reports it, the cost. Permission: conversations:read.",
3382
+ "method": "GET",
3383
+ "path": "/api/v1/templates/{template}/metrics",
3384
+ "permission": "conversations:read",
3385
+ "source": "spec",
3386
+ "params": [
3387
+ {
3388
+ "name": "template",
3389
+ "apiName": "template",
3390
+ "location": "path",
3391
+ "required": true,
3392
+ "kind": "string",
3393
+ "displayName": "Template ID",
3394
+ "description": "In the API: template.",
3395
+ "valueType": "integer"
3396
+ },
3397
+ {
3398
+ "name": "from",
3399
+ "apiName": "from",
3400
+ "location": "query",
3401
+ "required": false,
3402
+ "kind": "dateTime",
3403
+ "displayName": "From",
3404
+ "description": "In the API: from.",
3405
+ "format": "date"
3406
+ },
3407
+ {
3408
+ "name": "to",
3409
+ "apiName": "to",
3410
+ "location": "query",
3411
+ "required": false,
3412
+ "kind": "dateTime",
3413
+ "displayName": "To",
3414
+ "description": "In the API: to.",
3415
+ "format": "date"
3416
+ }
3417
+ ]
3418
+ },
3203
3419
  {
3204
3420
  "resource": "form",
3205
3421
  "value": "whatsappForm.index",
@@ -3208,7 +3424,7 @@ exports.OPERATIONS = [
3208
3424
  "method": "GET",
3209
3425
  "path": "/api/v1/forms",
3210
3426
  "permission": "conversations:read",
3211
- "source": "conversations-v1.18.10",
3427
+ "source": "conversations-forms",
3212
3428
  "list": {
3213
3429
  "pagination": "page",
3214
3430
  "sizeParam": "per_page",
@@ -3260,7 +3476,7 @@ exports.OPERATIONS = [
3260
3476
  "method": "POST",
3261
3477
  "path": "/api/v1/forms",
3262
3478
  "permission": "conversations:write",
3263
- "source": "conversations-v1.18.10",
3479
+ "source": "conversations-forms",
3264
3480
  "body": {
3265
3481
  "required": true,
3266
3482
  "root": "object"
@@ -3306,7 +3522,7 @@ exports.OPERATIONS = [
3306
3522
  "method": "GET",
3307
3523
  "path": "/api/v1/forms/templates",
3308
3524
  "permission": "conversations:read",
3309
- "source": "conversations-v1.18.10",
3525
+ "source": "conversations-forms",
3310
3526
  "list": {
3311
3527
  "pagination": "none",
3312
3528
  "maxPageSize": 100
@@ -3321,7 +3537,7 @@ exports.OPERATIONS = [
3321
3537
  "method": "GET",
3322
3538
  "path": "/api/v1/forms/{id}",
3323
3539
  "permission": "conversations:read",
3324
- "source": "conversations-v1.18.10",
3540
+ "source": "conversations-forms",
3325
3541
  "params": [
3326
3542
  {
3327
3543
  "name": "id",
@@ -3343,7 +3559,7 @@ exports.OPERATIONS = [
3343
3559
  "method": "PUT",
3344
3560
  "path": "/api/v1/forms/{id}",
3345
3561
  "permission": "conversations:write",
3346
- "source": "conversations-v1.18.10",
3562
+ "source": "conversations-forms",
3347
3563
  "body": {
3348
3564
  "required": true,
3349
3565
  "root": "object"
@@ -3398,7 +3614,7 @@ exports.OPERATIONS = [
3398
3614
  "method": "DELETE",
3399
3615
  "path": "/api/v1/forms/{id}",
3400
3616
  "permission": "conversations:write",
3401
- "source": "conversations-v1.18.10",
3617
+ "source": "conversations-forms",
3402
3618
  "params": [
3403
3619
  {
3404
3620
  "name": "id",
@@ -3420,7 +3636,7 @@ exports.OPERATIONS = [
3420
3636
  "method": "GET",
3421
3637
  "path": "/api/v1/forms/{id}/numbers",
3422
3638
  "permission": "conversations:read",
3423
- "source": "conversations-v1.18.10",
3639
+ "source": "conversations-forms",
3424
3640
  "params": [
3425
3641
  {
3426
3642
  "name": "id",
@@ -3442,7 +3658,7 @@ exports.OPERATIONS = [
3442
3658
  "method": "POST",
3443
3659
  "path": "/api/v1/forms/{id}/numbers",
3444
3660
  "permission": "conversations:write",
3445
- "source": "conversations-v1.18.10",
3661
+ "source": "conversations-forms",
3446
3662
  "body": {
3447
3663
  "required": true,
3448
3664
  "root": "object"
@@ -3478,7 +3694,7 @@ exports.OPERATIONS = [
3478
3694
  "method": "DELETE",
3479
3695
  "path": "/api/v1/forms/{id}/numbers/{deviceId}",
3480
3696
  "permission": "conversations:write",
3481
- "source": "conversations-v1.18.10",
3697
+ "source": "conversations-forms",
3482
3698
  "params": [
3483
3699
  {
3484
3700
  "name": "id",
@@ -3510,7 +3726,7 @@ exports.OPERATIONS = [
3510
3726
  "method": "POST",
3511
3727
  "path": "/api/v1/forms/{id}/numbers/retry",
3512
3728
  "permission": "conversations:write",
3513
- "source": "conversations-v1.18.10",
3729
+ "source": "conversations-forms",
3514
3730
  "params": [
3515
3731
  {
3516
3732
  "name": "id",
@@ -3532,7 +3748,7 @@ exports.OPERATIONS = [
3532
3748
  "method": "POST",
3533
3749
  "path": "/api/v1/forms/{id}/versions",
3534
3750
  "permission": "conversations:write",
3535
- "source": "conversations-v1.18.10",
3751
+ "source": "conversations-forms",
3536
3752
  "params": [
3537
3753
  {
3538
3754
  "name": "id",
@@ -3554,7 +3770,7 @@ exports.OPERATIONS = [
3554
3770
  "method": "POST",
3555
3771
  "path": "/api/v1/forms/{id}/sync",
3556
3772
  "permission": "conversations:write",
3557
- "source": "conversations-v1.18.10",
3773
+ "source": "conversations-forms",
3558
3774
  "params": [
3559
3775
  {
3560
3776
  "name": "id",
@@ -3576,7 +3792,7 @@ exports.OPERATIONS = [
3576
3792
  "method": "POST",
3577
3793
  "path": "/api/v1/forms/{id}/publish",
3578
3794
  "permission": "conversations:write",
3579
- "source": "conversations-v1.18.10",
3795
+ "source": "conversations-forms",
3580
3796
  "params": [
3581
3797
  {
3582
3798
  "name": "id",
@@ -3598,7 +3814,7 @@ exports.OPERATIONS = [
3598
3814
  "method": "GET",
3599
3815
  "path": "/api/v1/forms/families/{familyId}/definition",
3600
3816
  "permission": "conversations:read",
3601
- "source": "conversations-v1.18.10",
3817
+ "source": "conversations-forms",
3602
3818
  "params": [
3603
3819
  {
3604
3820
  "name": "familyId",
@@ -3620,7 +3836,7 @@ exports.OPERATIONS = [
3620
3836
  "method": "GET",
3621
3837
  "path": "/api/v1/forms/families/{familyId}/versions",
3622
3838
  "permission": "conversations:read",
3623
- "source": "conversations-v1.18.10",
3839
+ "source": "conversations-forms",
3624
3840
  "list": {
3625
3841
  "pagination": "page",
3626
3842
  "sizeParam": "perPage",
@@ -3647,7 +3863,7 @@ exports.OPERATIONS = [
3647
3863
  "method": "GET",
3648
3864
  "path": "/api/v1/forms/families/{familyId}/responses",
3649
3865
  "permission": "conversations:read",
3650
- "source": "conversations-v1.18.10",
3866
+ "source": "conversations-forms",
3651
3867
  "list": {
3652
3868
  "pagination": "page",
3653
3869
  "sizeParam": "per_page",
@@ -3740,7 +3956,7 @@ exports.OPERATIONS = [
3740
3956
  "method": "GET",
3741
3957
  "path": "/api/v1/forms/families/{familyId}/responses/{runId}",
3742
3958
  "permission": "conversations:read",
3743
- "source": "conversations-v1.18.10",
3959
+ "source": "conversations-forms",
3744
3960
  "params": [
3745
3961
  {
3746
3962
  "name": "familyId",
@@ -3772,7 +3988,7 @@ exports.OPERATIONS = [
3772
3988
  "method": "GET",
3773
3989
  "path": "/api/v1/forms/families/{familyId}/metrics",
3774
3990
  "permission": "conversations:read",
3775
- "source": "conversations-v1.18.10",
3991
+ "source": "conversations-forms",
3776
3992
  "params": [
3777
3993
  {
3778
3994
  "name": "familyId",
@@ -3835,7 +4051,7 @@ exports.OPERATIONS = [
3835
4051
  "path": "/api/v1/contacts/{contact}/message/form",
3836
4052
  "permission": "conversations:send",
3837
4053
  "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_…). Its own errors: 404 form_not_found and 422 form_not_published, form_not_on_number, number_not_eligible.",
3838
- "source": "conversations-v1.18.10",
4054
+ "source": "spec",
3839
4055
  "body": {
3840
4056
  "required": true,
3841
4057
  "root": "object"
@@ -4139,7 +4355,8 @@ exports.OPERATIONS = [
4139
4355
  "valueType": "string",
4140
4356
  "options": [
4141
4357
  "name",
4142
- "last_message_time"
4358
+ "last_message_time",
4359
+ "follow_up_date"
4143
4360
  ]
4144
4361
  },
4145
4362
  {
@@ -4656,7 +4873,7 @@ exports.OPERATIONS = [
4656
4873
  "required": true,
4657
4874
  "kind": "string",
4658
4875
  "displayName": "Group UID",
4659
- "description": "In the API: groupUid.",
4876
+ "description": "The ID of the group or the channel on WhatsApp. In the API: groupUid.",
4660
4877
  "valueType": "string"
4661
4878
  },
4662
4879
  {
@@ -4859,6 +5076,123 @@ exports.OPERATIONS = [
4859
5076
  }
4860
5077
  ]
4861
5078
  },
5079
+ {
5080
+ "resource": "group",
5081
+ "value": "apiGroupAction.sendMessage",
5082
+ "name": "Send a message to a group",
5083
+ "description": "Sends a text or one media file to a WhatsApp group now, from one of your numbers. It answers at once with an action_id; the message goes out right after. Permission: communities:send.",
5084
+ "method": "POST",
5085
+ "path": "/api/v1/groups/{group}/messages",
5086
+ "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",
5089
+ "body": {
5090
+ "required": true,
5091
+ "root": "object"
5092
+ },
5093
+ "params": [
5094
+ {
5095
+ "name": "group",
5096
+ "apiName": "group",
5097
+ "location": "path",
5098
+ "required": true,
5099
+ "kind": "string",
5100
+ "displayName": "Group UID",
5101
+ "description": "The group's uid, as List groups returns it (for example 120363012345678901@g.us). In the API: group.",
5102
+ "valueType": "string"
5103
+ },
5104
+ {
5105
+ "name": "device_id",
5106
+ "apiName": "device_id",
5107
+ "location": "body",
5108
+ "required": true,
5109
+ "kind": "number",
5110
+ "displayName": "Number ID",
5111
+ "description": "The number that sends: connected, and an admin of the group (a QR number) or the group's own number (an official one). In the API: device_id.",
5112
+ "valueType": "integer"
5113
+ },
5114
+ {
5115
+ "name": "type",
5116
+ "apiName": "type",
5117
+ "location": "body",
5118
+ "required": true,
5119
+ "kind": "options",
5120
+ "displayName": "Type",
5121
+ "description": "In the API: type.",
5122
+ "valueType": "string",
5123
+ "options": [
5124
+ "text",
5125
+ "image",
5126
+ "video",
5127
+ "audio",
5128
+ "document"
5129
+ ]
5130
+ },
5131
+ {
5132
+ "name": "text",
5133
+ "apiName": "text",
5134
+ "location": "body",
5135
+ "required": false,
5136
+ "kind": "string",
5137
+ "displayName": "Text",
5138
+ "description": "Only with type text, and required there. In the API: text.",
5139
+ "valueType": "string"
5140
+ },
5141
+ {
5142
+ "name": "media_url",
5143
+ "apiName": "media_url",
5144
+ "location": "body",
5145
+ "required": false,
5146
+ "kind": "string",
5147
+ "displayName": "Media URL",
5148
+ "description": "Only with image, video, audio or document, and required there: a public https URL that ends in an extension WhatsApp accepts for the type. In the API: media_url.",
5149
+ "valueType": "string"
5150
+ },
5151
+ {
5152
+ "name": "caption",
5153
+ "apiName": "caption",
5154
+ "location": "body",
5155
+ "required": false,
5156
+ "kind": "string",
5157
+ "displayName": "Caption",
5158
+ "description": "Only with image or video. In the API: caption.",
5159
+ "valueType": "string"
5160
+ },
5161
+ {
5162
+ "name": "file_name",
5163
+ "apiName": "file_name",
5164
+ "location": "body",
5165
+ "required": false,
5166
+ "kind": "string",
5167
+ "displayName": "File Name",
5168
+ "description": "Only with document: the name it arrives with. In the API: file_name.",
5169
+ "valueType": "string"
5170
+ }
5171
+ ]
5172
+ },
5173
+ {
5174
+ "resource": "group",
5175
+ "value": "apiGroupAction.show",
5176
+ "name": "Get a group action",
5177
+ "description": "Gets the status (queued, running, completed or failed) and the result of a group action, such as a message sent to a group. Permission: communities:read.",
5178
+ "method": "GET",
5179
+ "path": "/api/v1/groups/actions/{action}",
5180
+ "permission": "communities:read",
5181
+ "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",
5183
+ "params": [
5184
+ {
5185
+ "name": "action",
5186
+ "apiName": "action",
5187
+ "location": "path",
5188
+ "required": true,
5189
+ "kind": "string",
5190
+ "displayName": "Action ID",
5191
+ "description": "The action_id the action answered. In the API: action.",
5192
+ "valueType": "string"
5193
+ }
5194
+ ]
5195
+ },
4862
5196
  {
4863
5197
  "resource": "group",
4864
5198
  "value": "campaign.participants",
@@ -5437,7 +5771,7 @@ exports.OPERATIONS = [
5437
5771
  "resource": "device",
5438
5772
  "value": "device.index",
5439
5773
  "name": "List numbers",
5440
- "description": "Lists your WhatsApp numbers with their provider, whether they are connected and active, and their health, and gets the IDs the other operations use. Permission: accounts:read.",
5774
+ "description": "Lists your WhatsApp numbers with their provider, whether they are connected (connected) and active, and their health, and gets the IDs the other operations use. External Reference finds the number a connect link created. Permission: accounts:read.",
5441
5775
  "method": "GET",
5442
5776
  "path": "/api/v1/devices",
5443
5777
  "permission": "accounts:read",
@@ -5447,8 +5781,19 @@ exports.OPERATIONS = [
5447
5781
  "sizeParam": "perPage",
5448
5782
  "maxPageSize": 100
5449
5783
  },
5450
- "params": []
5451
- },
5784
+ "params": [
5785
+ {
5786
+ "name": "external_reference",
5787
+ "apiName": "external_reference",
5788
+ "location": "query",
5789
+ "required": false,
5790
+ "kind": "string",
5791
+ "displayName": "External Reference",
5792
+ "description": "Only the numbers with exactly this reference: yours, given when creating the number or the connect link. In the API: external_reference.",
5793
+ "valueType": "string"
5794
+ }
5795
+ ]
5796
+ },
5452
5797
  {
5453
5798
  "resource": "device",
5454
5799
  "value": "device.me",
@@ -5658,6 +6003,16 @@ exports.OPERATIONS = [
5658
6003
  "displayName": "Conversions API Consent",
5659
6004
  "description": "Consent to Meta's Conversions API (CAPI). Optional; it only applies to WhatsApp Cloud numbers of accounts with Conversions API enabled. In the API: capi_consent.",
5660
6005
  "valueType": "boolean"
6006
+ },
6007
+ {
6008
+ "name": "external_reference",
6009
+ "apiName": "external_reference",
6010
+ "location": "body",
6011
+ "required": false,
6012
+ "kind": "string",
6013
+ "displayName": "External Reference",
6014
+ "description": "Your own reference for this number (for example, your customer's ID); null clears it. Not unique. In the API: external_reference.",
6015
+ "valueType": "string"
5661
6016
  }
5662
6017
  ]
5663
6018
  },
@@ -6035,6 +6390,304 @@ exports.OPERATIONS = [
6035
6390
  }
6036
6391
  ]
6037
6392
  },
6393
+ {
6394
+ "resource": "device",
6395
+ "value": "deviceProvisioning.store",
6396
+ "name": "Create a number to connect by QR",
6397
+ "description": "Creates a number of the account that connects by scanning a QR code with the WhatsApp app. Then read its QR with \"Get a number's QR code\", or send your customer a connect link instead. Permission: accounts:operate.",
6398
+ "method": "POST",
6399
+ "path": "/api/v1/devices",
6400
+ "permission": "accounts:operate",
6401
+ "notice": "Needs a key of the account owner (403 connect_not_allowed) and a place in the plan (403 numbers_not_included or number_limit_reached). While a QR number has never been connected, it answers 409 pending_number_exists with its device_id: connect it or delete it. A QR number is not official: WhatsApp may restrict it if it sends messages people do not expect.",
6402
+ "source": "spec",
6403
+ "body": {
6404
+ "required": true,
6405
+ "root": "object"
6406
+ },
6407
+ "params": [
6408
+ {
6409
+ "name": "connection",
6410
+ "apiName": "connection",
6411
+ "location": "body",
6412
+ "required": true,
6413
+ "kind": "options",
6414
+ "displayName": "Connection",
6415
+ "description": "How the number connects. Only qr: an official number is connected with a connect link of type meta. In the API: connection.",
6416
+ "valueType": "string",
6417
+ "options": [
6418
+ "qr"
6419
+ ]
6420
+ },
6421
+ {
6422
+ "name": "alias",
6423
+ "apiName": "alias",
6424
+ "location": "body",
6425
+ "required": false,
6426
+ "kind": "string",
6427
+ "displayName": "Alias",
6428
+ "description": "Name shown in the panel. In the API: alias.",
6429
+ "valueType": "string"
6430
+ },
6431
+ {
6432
+ "name": "external_reference",
6433
+ "apiName": "external_reference",
6434
+ "location": "body",
6435
+ "required": false,
6436
+ "kind": "string",
6437
+ "displayName": "External Reference",
6438
+ "description": "Your own reference for this number (for example, your customer's ID). Not unique. It comes back in the number and in the device.* events. In the API: external_reference.",
6439
+ "valueType": "string"
6440
+ },
6441
+ {
6442
+ "name": "same_number_as",
6443
+ "apiName": "same_number_as",
6444
+ "location": "body",
6445
+ "required": false,
6446
+ "kind": "number",
6447
+ "displayName": "Same Number As (Number ID)",
6448
+ "description": "ID of a number of the account connected to the official API in coexistence: the QR connection is added to that same number and takes no new place in the plan. In the API: same_number_as.",
6449
+ "valueType": "integer"
6450
+ },
6451
+ {
6452
+ "name": "country",
6453
+ "apiName": "country",
6454
+ "location": "body",
6455
+ "required": false,
6456
+ "kind": "string",
6457
+ "displayName": "Country",
6458
+ "description": "Country the WhatsApp session is opened from, two letters (for example mx): the country of the phone that will scan the QR. Without it, co (Colombia). In the API: country.",
6459
+ "valueType": "string"
6460
+ }
6461
+ ]
6462
+ },
6463
+ {
6464
+ "resource": "device",
6465
+ "value": "deviceProvisioning.qr",
6466
+ "name": "Get a number's QR code",
6467
+ "description": "Gets the QR code that connects a QR number: scan it with the WhatsApp app (Linked devices). Once connected, connected is true and the device.connected event arrives. Permission: accounts:operate.",
6468
+ "method": "GET",
6469
+ "path": "/api/v1/devices/{device}/qr",
6470
+ "permission": "accounts:operate",
6471
+ "notice": "WhatsApp changes the code every few seconds until it is scanned: ask again every expires_in seconds (5) and show only the last one. qr_code is a PNG as a data URI, or null while the session starts. An official number answers 422 provider_unsupported. In n8n a connect link is simpler: its page shows the QR and renews it on its own.",
6472
+ "source": "spec",
6473
+ "params": [
6474
+ {
6475
+ "name": "device",
6476
+ "apiName": "device",
6477
+ "location": "path",
6478
+ "required": true,
6479
+ "kind": "string",
6480
+ "displayName": "Number ID",
6481
+ "description": "The number ID. In the API: device.",
6482
+ "valueType": "integer"
6483
+ }
6484
+ ]
6485
+ },
6486
+ {
6487
+ "resource": "device",
6488
+ "value": "connectLink.index",
6489
+ "name": "List connect links",
6490
+ "description": "Lists the account's connect links, newest first and without their url, filtered by status or by your reference. Permission: accounts:read.",
6491
+ "method": "GET",
6492
+ "path": "/api/v1/connect-links",
6493
+ "permission": "accounts:read",
6494
+ "source": "spec",
6495
+ "list": {
6496
+ "pagination": "page",
6497
+ "sizeParam": "perPage",
6498
+ "maxPageSize": 100
6499
+ },
6500
+ "params": [
6501
+ {
6502
+ "name": "status",
6503
+ "apiName": "status",
6504
+ "location": "query",
6505
+ "required": false,
6506
+ "kind": "options",
6507
+ "displayName": "Status",
6508
+ "description": "In the API: status.",
6509
+ "valueType": "string",
6510
+ "options": [
6511
+ "pending",
6512
+ "completed",
6513
+ "failed",
6514
+ "expired",
6515
+ "revoked"
6516
+ ]
6517
+ },
6518
+ {
6519
+ "name": "external_reference",
6520
+ "apiName": "external_reference",
6521
+ "location": "query",
6522
+ "required": false,
6523
+ "kind": "string",
6524
+ "displayName": "External Reference",
6525
+ "description": "Only the links with exactly this reference. In the API: external_reference.",
6526
+ "valueType": "string"
6527
+ }
6528
+ ]
6529
+ },
6530
+ {
6531
+ "resource": "device",
6532
+ "value": "connectLink.store",
6533
+ "name": "Create a connect link",
6534
+ "description": "Creates a single-use link for your customer to connect a WhatsApp number to your account from a Funnelchat page, without the panel: send them the url of the response. Permission: accounts:operate.",
6535
+ "method": "POST",
6536
+ "path": "/api/v1/connect-links",
6537
+ "permission": "accounts:operate",
6538
+ "notice": "The url appears only in this response, and whoever has it can connect a number to your account while the link is pending: treat it as a secret. With type qr the page shows the QR, and your customer has 10 minutes from tapping its button to scan it. While the official sign-up by link is not enabled, type meta answers 503 meta_connect_disabled. The result comes in device.connected (with connect_link_id and external_reference), in the return_url or with \"Get a connect link\". Up to 20 pending links per account.",
6539
+ "source": "spec",
6540
+ "body": {
6541
+ "required": true,
6542
+ "root": "object"
6543
+ },
6544
+ "params": [
6545
+ {
6546
+ "name": "type",
6547
+ "apiName": "type",
6548
+ "location": "body",
6549
+ "required": true,
6550
+ "kind": "options",
6551
+ "displayName": "Type",
6552
+ "description": "qr: a number connected by scanning a QR code. meta: an official number, with Meta's Embedded Signup. In the API: type.",
6553
+ "valueType": "string",
6554
+ "options": [
6555
+ "qr",
6556
+ "meta"
6557
+ ]
6558
+ },
6559
+ {
6560
+ "name": "allowed_connection_types",
6561
+ "apiName": "allowed_connection_types",
6562
+ "location": "body",
6563
+ "required": false,
6564
+ "kind": "multiOptions",
6565
+ "displayName": "Allowed Connection Types",
6566
+ "description": "Only with type meta, and required there: coexistence keeps the number in the WhatsApp Business app; dedicated is a number only for the API. In the API: allowed_connection_types.",
6567
+ "valueType": "string",
6568
+ "options": [
6569
+ "coexistence",
6570
+ "dedicated"
6571
+ ]
6572
+ },
6573
+ {
6574
+ "name": "provision_us_number",
6575
+ "apiName": "provision_us_number",
6576
+ "location": "body",
6577
+ "required": false,
6578
+ "kind": "boolean",
6579
+ "displayName": "Offer a US Number",
6580
+ "description": "Only with type meta: also offer a US number of Funnelchat's pool (always dedicated). In the API: provision_us_number.",
6581
+ "valueType": "boolean"
6582
+ },
6583
+ {
6584
+ "name": "device_id",
6585
+ "apiName": "device_id",
6586
+ "location": "body",
6587
+ "required": false,
6588
+ "kind": "number",
6589
+ "displayName": "Number ID to Reconnect",
6590
+ "description": "Reconnect this number of the account instead of adding one (it takes no new place). In the API: device_id.",
6591
+ "valueType": "integer"
6592
+ },
6593
+ {
6594
+ "name": "same_number_as",
6595
+ "apiName": "same_number_as",
6596
+ "location": "body",
6597
+ "required": false,
6598
+ "kind": "number",
6599
+ "displayName": "Same Number As (Number ID)",
6600
+ "description": "Only with type qr: add QR to this number of the account in coexistence. In the API: same_number_as.",
6601
+ "valueType": "integer"
6602
+ },
6603
+ {
6604
+ "name": "country",
6605
+ "apiName": "country",
6606
+ "location": "body",
6607
+ "required": false,
6608
+ "kind": "string",
6609
+ "displayName": "Country",
6610
+ "description": "Only with type qr and without Number ID: country the WhatsApp session is opened from, two letters (the country of your customer's phone). In the API: country.",
6611
+ "valueType": "string"
6612
+ },
6613
+ {
6614
+ "name": "external_reference",
6615
+ "apiName": "external_reference",
6616
+ "location": "body",
6617
+ "required": false,
6618
+ "kind": "string",
6619
+ "displayName": "External Reference",
6620
+ "description": "Your own reference: it is copied to the number the link creates and comes in device.connected. In the API: external_reference.",
6621
+ "valueType": "string"
6622
+ },
6623
+ {
6624
+ "name": "return_url",
6625
+ "apiName": "return_url",
6626
+ "location": "body",
6627
+ "required": false,
6628
+ "kind": "string",
6629
+ "displayName": "Return URL",
6630
+ "description": "https address the page sends your customer to at the end, with the result in the query string (connect_link_id, status, and device_id or error_code). In the API: return_url.",
6631
+ "valueType": "string"
6632
+ },
6633
+ {
6634
+ "name": "expires_in_minutes",
6635
+ "apiName": "expires_in_minutes",
6636
+ "location": "body",
6637
+ "required": false,
6638
+ "kind": "number",
6639
+ "displayName": "Expires In (Minutes)",
6640
+ "description": "How long the link lives: 30 to 10080 minutes (7 days); 1440 (24 hours) by default. In the API: expires_in_minutes.",
6641
+ "valueType": "integer"
6642
+ }
6643
+ ]
6644
+ },
6645
+ {
6646
+ "resource": "device",
6647
+ "value": "connectLink.show",
6648
+ "name": "Get a connect link",
6649
+ "description": "Gets a connect link's current status (pending, completed, failed, expired or revoked) and, once completed, the device_id of the number it connected. Permission: accounts:read.",
6650
+ "method": "GET",
6651
+ "path": "/api/v1/connect-links/{link}",
6652
+ "permission": "accounts:read",
6653
+ "notice": "error_code says why it did not complete: link_expired, already_used, revoked, quota_exceeded, trial_number_blocked, facebook_auth_failed, meta_error, number_not_owned, qr_timeout or provider_error.",
6654
+ "source": "spec",
6655
+ "params": [
6656
+ {
6657
+ "name": "link",
6658
+ "apiName": "link",
6659
+ "location": "path",
6660
+ "required": true,
6661
+ "kind": "string",
6662
+ "displayName": "Connect Link ID",
6663
+ "description": "The connect link ID. In the API: link.",
6664
+ "valueType": "integer"
6665
+ }
6666
+ ]
6667
+ },
6668
+ {
6669
+ "resource": "device",
6670
+ "value": "connectLink.destroy",
6671
+ "name": "Revoke a connect link",
6672
+ "description": "Revokes a pending connect link: its page then answers that the link no longer works. If the page had already created a number that is not connected yet, that number is deleted. Permission: accounts:operate.",
6673
+ "method": "DELETE",
6674
+ "path": "/api/v1/connect-links/{link}",
6675
+ "permission": "accounts:operate",
6676
+ "notice": "Only a pending link: otherwise it answers 409 link_not_pending.",
6677
+ "source": "spec",
6678
+ "params": [
6679
+ {
6680
+ "name": "link",
6681
+ "apiName": "link",
6682
+ "location": "path",
6683
+ "required": true,
6684
+ "kind": "string",
6685
+ "displayName": "Connect Link ID",
6686
+ "description": "The connect link ID. In the API: link.",
6687
+ "valueType": "integer"
6688
+ }
6689
+ ]
6690
+ },
6038
6691
  {
6039
6692
  "resource": "device",
6040
6693
  "value": "deviceHealth.show",
@@ -6489,9 +7142,10 @@ exports.OPERATIONS = [
6489
7142
  "path": "/api/v1/webhooks",
6490
7143
  "permission": "webhooks:read",
6491
7144
  "notice": "With an API key, besides the route's permission, it needs the read permission of the area of each event type of the subscription (accounts:read, conversations:read or communities:read).",
6492
- "source": "accounts-webhook-subscriptions",
7145
+ "source": "spec",
6493
7146
  "list": {
6494
- "pagination": "none",
7147
+ "pagination": "page",
7148
+ "sizeParam": "perPage",
6495
7149
  "maxPageSize": 100
6496
7150
  },
6497
7151
  "params": []
@@ -6505,7 +7159,7 @@ exports.OPERATIONS = [
6505
7159
  "path": "/api/v1/webhooks",
6506
7160
  "permission": "webhooks:write",
6507
7161
  "notice": "With an API key, besides the route's permission, it needs the read permission of the area of each event type of the subscription (accounts:read, conversations:read or communities:read).",
6508
- "source": "accounts-webhook-subscriptions",
7162
+ "source": "spec",
6509
7163
  "body": {
6510
7164
  "required": true,
6511
7165
  "root": "object"
@@ -6561,7 +7215,7 @@ exports.OPERATIONS = [
6561
7215
  "path": "/api/v1/webhooks/{id}",
6562
7216
  "permission": "webhooks:read",
6563
7217
  "notice": "With an API key, besides the route's permission, it needs the read permission of the area of each event type of the subscription (accounts:read, conversations:read or communities:read).",
6564
- "source": "accounts-webhook-subscriptions",
7218
+ "source": "spec",
6565
7219
  "params": [
6566
7220
  {
6567
7221
  "name": "id",
@@ -6584,7 +7238,7 @@ exports.OPERATIONS = [
6584
7238
  "path": "/api/v1/webhooks/{id}",
6585
7239
  "permission": "webhooks:write",
6586
7240
  "notice": "With an API key, besides the route's permission, it needs the read permission of the area of each event type of the subscription (accounts:read, conversations:read or communities:read).",
6587
- "source": "accounts-webhook-subscriptions",
7241
+ "source": "spec",
6588
7242
  "body": {
6589
7243
  "required": true,
6590
7244
  "root": "object"
@@ -6664,78 +7318,7 @@ exports.OPERATIONS = [
6664
7318
  "path": "/api/v1/webhooks/{id}",
6665
7319
  "permission": "webhooks:write",
6666
7320
  "notice": "Irreversible operation. With an API key, besides the route's permission, it needs the read permission of the area of each event type of the subscription (accounts:read, conversations:read or communities:read).",
6667
- "source": "accounts-webhook-subscriptions",
6668
- "params": [
6669
- {
6670
- "name": "id",
6671
- "apiName": "id",
6672
- "location": "path",
6673
- "required": true,
6674
- "kind": "string",
6675
- "displayName": "Subscription ID",
6676
- "description": "The `id` (UUID) of the subscription. In the API: id.",
6677
- "valueType": "string"
6678
- }
6679
- ]
6680
- },
6681
- {
6682
- "resource": "webhook",
6683
- "value": "webhookSubscriptionDelivery.index",
6684
- "name": "List a subscription's deliveries",
6685
- "description": "Use it to review each delivery attempt of a subscription: HTTP status, error and duration, newest first. Permission: webhooks:read.",
6686
- "method": "GET",
6687
- "path": "/api/v1/webhooks/{id}/deliveries",
6688
- "permission": "webhooks:read",
6689
- "notice": "With an API key, besides the route's permission, it needs the read permission of the area of each event type of the subscription (accounts:read, conversations:read or communities:read).",
6690
- "source": "accounts-webhook-subscriptions",
6691
- "list": {
6692
- "pagination": "page",
6693
- "sizeParam": "per_page",
6694
- "maxPageSize": 100
6695
- },
6696
- "params": [
6697
- {
6698
- "name": "id",
6699
- "apiName": "id",
6700
- "location": "path",
6701
- "required": true,
6702
- "kind": "string",
6703
- "displayName": "Subscription ID",
6704
- "description": "The `id` (UUID) of the subscription. In the API: id.",
6705
- "valueType": "string"
6706
- },
6707
- {
6708
- "name": "event_type",
6709
- "apiName": "event_type",
6710
- "location": "query",
6711
- "required": false,
6712
- "kind": "string",
6713
- "displayName": "Event Type",
6714
- "description": "Only the attempts of this event type. In the API: event_type.",
6715
- "valueType": "string"
6716
- },
6717
- {
6718
- "name": "event_id",
6719
- "apiName": "event_id",
6720
- "location": "query",
6721
- "required": false,
6722
- "kind": "string",
6723
- "displayName": "Event ID",
6724
- "description": "Only the attempts of this event (`evt_…`). In the API: event_id.",
6725
- "valueType": "string"
6726
- }
6727
- ]
6728
- },
6729
- {
6730
- "resource": "webhook",
6731
- "value": "webhookSubscriptionTest.test",
6732
- "name": "Send a test event",
6733
- "description": "Use it to test your receiver: sends a single webhook.test event signed like a real one, without retries, and keeps it in the history. Permission: webhooks:write.",
6734
- "method": "POST",
6735
- "path": "/api/v1/webhooks/{id}/test",
6736
- "permission": "webhooks:write",
6737
- "notice": "With an API key, besides the route's permission, it needs the read permission of the area of each event type of the subscription (accounts:read, conversations:read or communities:read).",
6738
- "source": "accounts-webhook-subscriptions",
7321
+ "source": "spec",
6739
7322
  "params": [
6740
7323
  {
6741
7324
  "name": "id",
@@ -6801,7 +7384,7 @@ exports.OPERATIONS = [
6801
7384
  "required": true,
6802
7385
  "kind": "string",
6803
7386
  "displayName": "URL",
6804
- "description": "Must be https. Internal addresses are rejected. In the API: url.",
7387
+ "description": "Must be https and resolve to a public internet address. In the API: url.",
6805
7388
  "valueType": "string"
6806
7389
  },
6807
7390
  {
@@ -6821,11 +7404,16 @@ exports.OPERATIONS = [
6821
7404
  "required": false,
6822
7405
  "kind": "multiOptions",
6823
7406
  "displayName": "Events",
6824
- "description": "Initial subscriptions, optional: an endpoint can start without any and subscribe later. In the API: events.",
7407
+ "description": "Initial subscriptions, optional: without events the endpoint is registered without receiving anything, and subscribes later. In the API: events.",
6825
7408
  "valueType": "string",
6826
7409
  "options": [
6827
7410
  "device.disconnected",
6828
7411
  "device.connected",
7412
+ "device.deleted",
7413
+ "device.health_changed",
7414
+ "device.quality_changed",
7415
+ "device.messaging_limit_changed",
7416
+ "device.display_name_reviewed",
6829
7417
  "billing.payment_failed",
6830
7418
  "billing.plan_blocked",
6831
7419
  "billing.upcoming_charge",
@@ -7010,6 +7598,77 @@ exports.OPERATIONS = [
7010
7598
  "valueType": "integer"
7011
7599
  }
7012
7600
  ]
7601
+ },
7602
+ {
7603
+ "resource": "webhook",
7604
+ "value": "webhookSubscriptionDelivery.index",
7605
+ "name": "List a subscription's deliveries",
7606
+ "description": "Use it to review each delivery attempt of a subscription: HTTP status, error and duration, newest first. Permission: webhooks:read.",
7607
+ "method": "GET",
7608
+ "path": "/api/v1/webhooks/{id}/deliveries",
7609
+ "permission": "webhooks:read",
7610
+ "notice": "With an API key, besides the route's permission, it needs the read permission of the area of each event type of the subscription (accounts:read, conversations:read or communities:read).",
7611
+ "source": "spec",
7612
+ "list": {
7613
+ "pagination": "page",
7614
+ "sizeParam": "perPage",
7615
+ "maxPageSize": 100
7616
+ },
7617
+ "params": [
7618
+ {
7619
+ "name": "id",
7620
+ "apiName": "id",
7621
+ "location": "path",
7622
+ "required": true,
7623
+ "kind": "string",
7624
+ "displayName": "Subscription ID",
7625
+ "description": "The `id` (UUID) of the subscription. In the API: id.",
7626
+ "valueType": "string"
7627
+ },
7628
+ {
7629
+ "name": "event_type",
7630
+ "apiName": "event_type",
7631
+ "location": "query",
7632
+ "required": false,
7633
+ "kind": "string",
7634
+ "displayName": "Event Type",
7635
+ "description": "Only the attempts of this event type. In the API: event_type.",
7636
+ "valueType": "string"
7637
+ },
7638
+ {
7639
+ "name": "event_id",
7640
+ "apiName": "event_id",
7641
+ "location": "query",
7642
+ "required": false,
7643
+ "kind": "string",
7644
+ "displayName": "Event ID",
7645
+ "description": "Only the attempts of this event (evt_…). In the API: event_id.",
7646
+ "valueType": "string"
7647
+ }
7648
+ ]
7649
+ },
7650
+ {
7651
+ "resource": "webhook",
7652
+ "value": "webhookSubscriptionTest.test",
7653
+ "name": "Send a test event",
7654
+ "description": "Use it to test your receiver: sends a single webhook.test event signed like a real one, without retries, and keeps it in the history. Permission: webhooks:write.",
7655
+ "method": "POST",
7656
+ "path": "/api/v1/webhooks/{id}/test",
7657
+ "permission": "webhooks:write",
7658
+ "notice": "With an API key, besides the route's permission, it needs the read permission of the area of each event type of the subscription (accounts:read, conversations:read or communities:read).",
7659
+ "source": "spec",
7660
+ "params": [
7661
+ {
7662
+ "name": "id",
7663
+ "apiName": "id",
7664
+ "location": "path",
7665
+ "required": true,
7666
+ "kind": "string",
7667
+ "displayName": "Subscription ID",
7668
+ "description": "The `id` (UUID) of the subscription. In the API: id.",
7669
+ "valueType": "string"
7670
+ }
7671
+ ]
7013
7672
  }
7014
7673
  ];
7015
7674
  //# sourceMappingURL=operations.js.map