@ingenx-io/valets-schema-mcp-server 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.
Files changed (65) hide show
  1. package/data/docs/collections/firestore-paths.md +2 -2
  2. package/data/docs/enums/attention-status.md +1 -1
  3. package/data/docs/enums/booking-status.md +1 -1
  4. package/data/docs/enums/customer-payment-status.md +1 -1
  5. package/data/docs/enums/customer-payment-target-type.md +1 -1
  6. package/data/docs/enums/delivery-type.md +1 -1
  7. package/data/docs/enums/deployment-link-type.md +1 -1
  8. package/data/docs/enums/event-status.md +1 -1
  9. package/data/docs/enums/fulfillment-status.md +1 -1
  10. package/data/docs/enums/loyalty-transaction-type.md +1 -1
  11. package/data/docs/enums/order-status.md +1 -1
  12. package/data/docs/enums/outbound-message-format.md +1 -1
  13. package/data/docs/enums/outbound-message-purpose.md +1 -1
  14. package/data/docs/enums/outbound-message-status.md +1 -1
  15. package/data/docs/enums/payment-method.md +1 -1
  16. package/data/docs/enums/payment-proof-status.md +1 -1
  17. package/data/docs/enums/payment-status.md +1 -1
  18. package/data/docs/enums/pending-issue.md +1 -1
  19. package/data/docs/enums/return-status.md +1 -1
  20. package/data/docs/enums/session-status.md +1 -1
  21. package/data/docs/enums/site-status.md +1 -1
  22. package/data/docs/enums/stocktake-frequency.md +1 -1
  23. package/data/docs/enums/stocktake-item-status.md +1 -1
  24. package/data/docs/enums/stocktake-status.md +1 -1
  25. package/data/docs/enums/ticket-status.md +1 -1
  26. package/data/docs/enums/waba-label.md +1 -1
  27. package/data/docs/enums/whatsapp-button-sub-type.md +22 -0
  28. package/data/docs/enums/whatsapp-template-component.md +23 -0
  29. package/data/docs/enums/whatsapp-template-status.md +2 -2
  30. package/data/docs/index.md +4 -2
  31. package/data/docs/models/allowed-user.md +1 -1
  32. package/data/docs/models/analytics-backfill.md +1 -1
  33. package/data/docs/models/analytics-daily.md +1 -1
  34. package/data/docs/models/analytics-event.md +1 -1
  35. package/data/docs/models/analytics-hourly.md +1 -1
  36. package/data/docs/models/booking-version.md +1 -1
  37. package/data/docs/models/booking.md +1 -1
  38. package/data/docs/models/customer-payment-allocation.md +1 -1
  39. package/data/docs/models/customer-payment.md +1 -1
  40. package/data/docs/models/customer.md +1 -1
  41. package/data/docs/models/event.md +1 -1
  42. package/data/docs/models/loyalty-config.md +1 -1
  43. package/data/docs/models/loyalty-reward.md +1 -1
  44. package/data/docs/models/loyalty-status.md +1 -1
  45. package/data/docs/models/loyalty-transaction.md +1 -1
  46. package/data/docs/models/magic-link-request.md +1 -1
  47. package/data/docs/models/metrics-current.md +1 -1
  48. package/data/docs/models/metrics-daily.md +1 -1
  49. package/data/docs/models/metrics-monthly.md +1 -1
  50. package/data/docs/models/order-item.md +1 -1
  51. package/data/docs/models/order.md +1 -1
  52. package/data/docs/models/sale.md +1 -1
  53. package/data/docs/models/site-payment.md +1 -1
  54. package/data/docs/models/site.md +1 -1
  55. package/data/docs/models/stocktake-item.md +1 -1
  56. package/data/docs/models/stocktake.md +1 -1
  57. package/data/docs/models/ticket.md +1 -1
  58. package/data/docs/models/whatsapp-inbound-message.md +1 -1
  59. package/data/docs/models/whatsapp-outbound-lifecycle-event.md +1 -1
  60. package/data/docs/models/whatsapp-outbound-message.md +1 -1
  61. package/data/docs/models/whatsapp-template.md +150 -33
  62. package/data/static/llms.txt +25 -5
  63. package/data/static/openapi.yaml +70 -8
  64. package/data/static/schemas.json +73 -9
  65. package/package.json +1 -1
@@ -366,4 +366,4 @@ Do not include in write requests. This field is set exclusively by the server (F
366
366
  Specific value: `true`
367
367
 
368
368
  ----------------------------------------------------------------------------------------------------------------------------
369
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 01:15:18 +0000
369
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 14:03:20 +0000
@@ -303,7 +303,7 @@ Do not include in write requests. This field is set exclusively by the server (F
303
303
  **Description:** (Read-only) Raw Meta error object(s).
304
304
 
305
305
  ----------------------------------------------------------------------------------------------------------------------------
306
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 01:15:18 +0000
306
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 14:03:20 +0000
307
307
 
308
308
  :::warning Server-set
309
309
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
@@ -582,7 +582,7 @@ Do not include in write requests. This field is set exclusively by the server (F
582
582
  | **Required** | No |
583
583
 
584
584
  ----------------------------------------------------------------------------------------------------------------------------
585
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 01:15:18 +0000
585
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 14:03:20 +0000
586
586
 
587
587
  :::warning Server-set
588
588
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
@@ -12,12 +12,17 @@ sidebar_position: 31
12
12
  ```json
13
13
  {
14
14
  "id": null,
15
+ "waba": "waba",
16
+ "wabaId": "wab_ref123",
15
17
  "name": "Amadou Diallo",
16
18
  "language": "language",
17
19
  "category": "category",
18
20
  "status": "status",
19
- "variables": [
20
- "example"
21
+ "parameters": [
22
+ {
23
+ "name": "Amadou Diallo",
24
+ "component": "component"
25
+ }
21
26
  ],
22
27
  "preview": "preview"
23
28
  }
@@ -27,13 +32,20 @@ sidebar_position: 31
27
32
 
28
33
 
29
34
  - [1. Property `id`](#id)
30
- - [2. Property `name`](#name)
31
- - [3. Property `language`](#language)
32
- - [4. Property `category`](#category)
33
- - [5. Property `status`](#status)
34
- - [6. Property `variables`](#variables)
35
- - [6.1. variables items](#variables_items)
36
- - [7. Property `preview`](#preview)
35
+ - [2. Property `waba`](#waba)
36
+ - [3. Property `wabaId`](#wabaId)
37
+ - [4. Property `name`](#name)
38
+ - [5. Property `language`](#language)
39
+ - [6. Property `category`](#category)
40
+ - [7. Property `status`](#status)
41
+ - [8. Property `parameters`](#parameters)
42
+ - [8.1. parameters items](#parameters_items)
43
+ - [8.1.1. Property `name`](#parameters_items_name)
44
+ - [8.1.2. Property `component`](#parameters_items_component)
45
+ - [8.1.3. Property `buttonIndex`](#parameters_items_buttonIndex)
46
+ - [8.1.4. Property `buttonSubType`](#parameters_items_buttonSubType)
47
+ - [8.1.5. Property `buttonUrlBase`](#parameters_items_buttonUrlBase)
48
+ - [9. Property `preview`](#preview)
37
49
 
38
50
  | | |
39
51
  | ------------------------- | ------------------------------- |
@@ -42,17 +54,19 @@ sidebar_position: 31
42
54
  | **Additional properties** | Not allowed |
43
55
  | **Defined in** | #/definitions/whatsapp-template |
44
56
 
45
- **Description:** WhatsappTemplate — Meta-approved template synced from the WhatsApp Business API (GH#43). Collection: whatsapp_templates/\{docId\}. Backend-synced; dashboard reads only.
57
+ **Description:** WhatsappTemplate — Meta-approved template synced from the WhatsApp Business API (GH#43; parameter placement GH#46). Collection: whatsapp_templates/\{docId\}, doc ID `\{waba\}__\{name\}__\{language\}`. WABA-scoped; backend-synced; dashboard reads only.
46
58
 
47
- | Property | Pattern | Type | Deprecated | Definition | Title/Description |
48
- | -------------------------- | ------- | ---------------- | ---------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
49
- | - [id](#id ) | No | string or null | No | - | (Read-only) Firestore document ID — composite \`\{name\}__\{language\}\`. |
50
- | + [name](#name ) | No | string | No | - | (Read-only) Template name as registered with Meta. |
51
- | + [language](#language ) | No | string | No | - | (Read-only) Template language/locale code (e.g. "en", "fr"). |
52
- | + [category](#category ) | No | string | No | - | (Read-only) Meta template category (e.g. MARKETING, UTILITY, AUTHENTICATION). |
53
- | + [status](#status ) | No | enum (of string) | No | In #/definitions/whatsapp-template-status | (Read-only) Meta review status. Only APPROVED templates can be sent. |
54
- | + [variables](#variables ) | No | array of string | No | - | (Read-only) Declared variable names/placeholders. A message supplies values keyed by these names via WhatsappOutboundMessage.template.variables. |
55
- | + [preview](#preview ) | No | string | No | - | (Read-only) Rendered preview text for display in the dashboard picker. |
59
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
60
+ | ---------------------------- | ------- | ---------------- | ---------- | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
61
+ | - [id](#id ) | No | string or null | No | - | (Read-only) Firestore document ID — composite \`\{waba\}__\{name\}__\{language\}\`. |
62
+ | + [waba](#waba ) | No | enum (of string) | No | In #/definitions/waba-label | (Read-only) WABA label this template is approved on. Templates are WABA-scoped. Mirrors WhatsappOutboundMessage.waba. |
63
+ | + [wabaId](#wabaId ) | No | string | No | - | (Read-only) Meta WABA ID this template belongs to. The sender must verify its phone number belongs to this WABA before using the template. |
64
+ | + [name](#name ) | No | string | No | - | (Read-only) Template name as registered with Meta. |
65
+ | + [language](#language ) | No | string | No | - | (Read-only) Template language/locale code (e.g. "en", "fr"). |
66
+ | + [category](#category ) | No | string | No | - | (Read-only) Meta template category (e.g. MARKETING, UTILITY, AUTHENTICATION). |
67
+ | + [status](#status ) | No | enum (of string) | No | In #/definitions/whatsapp-template-status | (Read-only) Meta review status. Only APPROVED templates can be sent. |
68
+ | + [parameters](#parameters ) | No | array of object | No | - | (Read-only) Declared parameters with component placement. Supersedes the flat \`variables\` list (GH#46) — lets the send group values into the correct header/body/button components. A message supplies values keyed by \`name\` via WhatsappOutboundMessage.template.variables. |
69
+ | + [preview](#preview ) | No | string | No | - | (Read-only) Rendered preview text for display in the dashboard picker. |
56
70
 
57
71
  ## <a name="id"></a>1. Property `id`
58
72
 
@@ -61,13 +75,44 @@ sidebar_position: 31
61
75
  | **Type** | `string or null` |
62
76
  | **Required** | No |
63
77
 
64
- **Description:** (Read-only) Firestore document ID — composite `\{name\}__\{language\}`.
78
+ **Description:** (Read-only) Firestore document ID — composite `\{waba\}__\{name\}__\{language\}`.
65
79
 
66
80
  :::warning Server-set
67
81
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
68
82
  :::
69
83
 
70
- ## <a name="name"></a>2. Property `name`
84
+ ## <a name="waba"></a>2. Property `waba`
85
+
86
+ | | |
87
+ | -------------- | ------------------------ |
88
+ | **Type** | `enum (of string)` |
89
+ | **Required** | Yes |
90
+ | **Defined in** | #/definitions/waba-label |
91
+
92
+ **Description:** (Read-only) WABA label this template is approved on. Templates are WABA-scoped. Mirrors WhatsappOutboundMessage.waba.
93
+
94
+ Must be one of:
95
+ * "cmz"
96
+ * "val"
97
+
98
+ :::warning Server-set
99
+ Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
100
+ :::
101
+
102
+ ## <a name="wabaId"></a>3. Property `wabaId`
103
+
104
+ | | |
105
+ | ------------ | -------- |
106
+ | **Type** | `string` |
107
+ | **Required** | Yes |
108
+
109
+ **Description:** (Read-only) Meta WABA ID this template belongs to. The sender must verify its phone number belongs to this WABA before using the template.
110
+
111
+ :::warning Server-set
112
+ Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
113
+ :::
114
+
115
+ ## <a name="name"></a>4. Property `name`
71
116
 
72
117
  | | |
73
118
  | ------------ | -------- |
@@ -80,7 +125,7 @@ Do not include in write requests. This field is set exclusively by the server (F
80
125
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
81
126
  :::
82
127
 
83
- ## <a name="language"></a>3. Property `language`
128
+ ## <a name="language"></a>5. Property `language`
84
129
 
85
130
  | | |
86
131
  | ------------ | -------- |
@@ -93,7 +138,7 @@ Do not include in write requests. This field is set exclusively by the server (F
93
138
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
94
139
  :::
95
140
 
96
- ## <a name="category"></a>4. Property `category`
141
+ ## <a name="category"></a>6. Property `category`
97
142
 
98
143
  | | |
99
144
  | ------------ | -------- |
@@ -106,7 +151,7 @@ Do not include in write requests. This field is set exclusively by the server (F
106
151
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
107
152
  :::
108
153
 
109
- ## <a name="status"></a>5. Property `status`
154
+ ## <a name="status"></a>7. Property `status`
110
155
 
111
156
  | | |
112
157
  | -------------- | -------------------------------------- |
@@ -128,14 +173,14 @@ Must be one of:
128
173
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
129
174
  :::
130
175
 
131
- ## <a name="variables"></a>6. Property `variables`
176
+ ## <a name="parameters"></a>8. Property `parameters`
132
177
 
133
178
  | | |
134
179
  | ------------ | ----------------- |
135
- | **Type** | `array of string` |
180
+ | **Type** | `array of object` |
136
181
  | **Required** | Yes |
137
182
 
138
- **Description:** (Read-only) Declared variable names/placeholders. A message supplies values keyed by these names via WhatsappOutboundMessage.template.variables.
183
+ **Description:** (Read-only) Declared parameters with component placement. Supersedes the flat `variables` list (GH#46) — lets the send group values into the correct header/body/button components. A message supplies values keyed by `name` via WhatsappOutboundMessage.template.variables.
139
184
 
140
185
  | | Array restrictions |
141
186
  | -------------------- | ------------------ |
@@ -145,22 +190,94 @@ Do not include in write requests. This field is set exclusively by the server (F
145
190
  | **Additional items** | False |
146
191
  | **Tuple validation** | See below |
147
192
 
148
- | Each item of this array must be | Description |
149
- | ----------------------------------- | ----------- |
150
- | [variables items](#variables_items) | - |
193
+ | Each item of this array must be | Description |
194
+ | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
195
+ | [parameters items](#parameters_items) | Declared WhatsApp template parameter with component placement (GH#46) and, for URL buttons, the configured URL pattern (GH#51). |
196
+
197
+ ### <a name="parameters_items"></a>8.1. parameters items
198
+
199
+ | | |
200
+ | ------------------------- | ----------- |
201
+ | **Type** | `object` |
202
+ | **Required** | No |
203
+ | **Additional properties** | Not allowed |
151
204
 
152
- ### <a name="variables_items"></a>6.1. variables items
205
+ **Description:** Declared WhatsApp template parameter with component placement (GH#46) and, for URL buttons, the configured URL pattern (GH#51).
206
+
207
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
208
+ | --------------------------------------------------- | ------- | ---------------- | ---------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
209
+ | + [name](#parameters_items_name ) | No | string | No | - | Parameter name/placeholder (e.g. "1"). Matches a key in WhatsappOutboundMessage.template.variables. |
210
+ | + [component](#parameters_items_component ) | No | enum (of string) | No | In #/definitions/whatsapp-template-component | Which template component this parameter targets: header \| body \| button. |
211
+ | - [buttonIndex](#parameters_items_buttonIndex ) | No | integer | No | - | 0-based button position. Present only when component=button (Meta requires a string index at send time). |
212
+ | - [buttonSubType](#parameters_items_buttonSubType ) | No | enum (of string) | No | In #/definitions/whatsapp-button-sub-type | Button sub-type (url \| quick_reply). Present only when component=button. |
213
+ | - [buttonUrlBase](#parameters_items_buttonUrlBase ) | No | string | No | - | For component=button + buttonSubType=url: the template's configured button URL incl. the placeholder, e.g. "https://zahoui-review.web.app/\{\{1\}\}". Meta requires the variable at the URL end, so the supplied value is the suffix appended after the static prefix. Lets the dashboard display the resulting link (GH#51). |
214
+
215
+ #### <a name="parameters_items_name"></a>8.1.1. Property `name`
216
+
217
+ | | |
218
+ | ------------ | -------- |
219
+ | **Type** | `string` |
220
+ | **Required** | Yes |
221
+
222
+ **Description:** Parameter name/placeholder (e.g. "1"). Matches a key in WhatsappOutboundMessage.template.variables.
223
+
224
+ #### <a name="parameters_items_component"></a>8.1.2. Property `component`
225
+
226
+ | | |
227
+ | -------------- | ----------------------------------------- |
228
+ | **Type** | `enum (of string)` |
229
+ | **Required** | Yes |
230
+ | **Defined in** | #/definitions/whatsapp-template-component |
231
+
232
+ **Description:** Which template component this parameter targets: header | body | button.
233
+
234
+ Must be one of:
235
+ * "header"
236
+ * "body"
237
+ * "button"
238
+
239
+ #### <a name="parameters_items_buttonIndex"></a>8.1.3. Property `buttonIndex`
240
+
241
+ | | |
242
+ | ------------ | --------- |
243
+ | **Type** | `integer` |
244
+ | **Required** | No |
245
+
246
+ **Description:** 0-based button position. Present only when component=button (Meta requires a string index at send time).
247
+
248
+ | Restrictions | |
249
+ | ------------ | ---------------------- |
250
+ | **Minimum** | &ge; -9007199254740991 |
251
+ | **Maximum** | &le; 9007199254740991 |
252
+
253
+ #### <a name="parameters_items_buttonSubType"></a>8.1.4. Property `buttonSubType`
254
+
255
+ | | |
256
+ | -------------- | -------------------------------------- |
257
+ | **Type** | `enum (of string)` |
258
+ | **Required** | No |
259
+ | **Defined in** | #/definitions/whatsapp-button-sub-type |
260
+
261
+ **Description:** Button sub-type (url | quick_reply). Present only when component=button.
262
+
263
+ Must be one of:
264
+ * "url"
265
+ * "quick_reply"
266
+
267
+ #### <a name="parameters_items_buttonUrlBase"></a>8.1.5. Property `buttonUrlBase`
153
268
 
154
269
  | | |
155
270
  | ------------ | -------- |
156
271
  | **Type** | `string` |
157
272
  | **Required** | No |
158
273
 
274
+ **Description:** For component=button + buttonSubType=url: the template's configured button URL incl. the placeholder, e.g. "https://zahoui-review.web.app/\{\{1\}\}". Meta requires the variable at the URL end, so the supplied value is the suffix appended after the static prefix. Lets the dashboard display the resulting link (GH#51).
275
+
159
276
  :::warning Server-set
160
277
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
161
278
  :::
162
279
 
163
- ## <a name="preview"></a>7. Property `preview`
280
+ ## <a name="preview"></a>9. Property `preview`
164
281
 
165
282
  | | |
166
283
  | ------------ | -------- |
@@ -170,7 +287,7 @@ Do not include in write requests. This field is set exclusively by the server (F
170
287
  **Description:** (Read-only) Rendered preview text for display in the dashboard picker.
171
288
 
172
289
  ----------------------------------------------------------------------------------------------------------------------------
173
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 01:15:18 +0000
290
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 14:03:20 +0000
174
291
 
175
292
  :::warning Server-set
176
293
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
@@ -110,6 +110,14 @@ Values: VALID, USED, CANCELLED
110
110
  Human-readable WABA label identifying which Meta business number received the message (GH#36).
111
111
  Values: cmz, val
112
112
 
113
+ ### WhatsappButtonSubType
114
+ Sub-type of a WhatsApp template button parameter. Set when WhatsappTemplateParameter.component === "button" — maps to Meta `components[].sub_type` (GH#46).
115
+ Values: url, quick_reply
116
+
117
+ ### WhatsappTemplateComponent
118
+ WhatsApp template component a parameter targets. Determines which Meta `components` entry the supplied value is placed in at send time (GH#46).
119
+ Values: header, body, button
120
+
113
121
  ### WhatsappTemplateStatus
114
122
  Meta review status of a WhatsApp message template, synced from the WhatsApp Business API. Only APPROVED templates can be sent. The fuller Meta status set is used deliberately (vs just APPROVED/PENDING/REJECTED) so this enum has a distinct value signature from PaymentProofStatus in the JSON-Schema $ref matcher (GH#43).
115
123
  Values: APPROVED, PENDING, REJECTED, PAUSED, DISABLED, IN_APPEAL
@@ -1613,28 +1621,40 @@ Example:
1613
1621
  ```
1614
1622
 
1615
1623
  ### WhatsappTemplate
1616
- Fields: 7 (6 required)
1624
+ Fields: 9 (8 required)
1617
1625
 
1618
1626
  | Field | Type | Required | Description |
1619
1627
  |-------|------|----------|-------------|
1620
- | id | ['string', 'null'] | no | (Read-only) Firestore document ID — composite `{name}__{language}`. |
1628
+ | id | ['string', 'null'] | no | (Read-only) Firestore document ID — composite `{waba}__{name}__{language}`. |
1629
+ | waba | WabaLabel | yes | (Read-only) WABA label this template is approved on. Templates are WABA-scoped. Mirrors WhatsappOutboundMessage.waba. |
1630
+ | wabaId | string | yes | (Read-only) Meta WABA ID this template belongs to. The sender must verify its phone number belongs to this WABA before using the template. |
1621
1631
  | name | string | yes | (Read-only) Template name as registered with Meta. |
1622
1632
  | language | string | yes | (Read-only) Template language/locale code (e.g. "en", "fr"). |
1623
1633
  | category | string | yes | (Read-only) Meta template category (e.g. MARKETING, UTILITY, AUTHENTICATION). |
1624
1634
  | status | WhatsappTemplateStatus | yes | (Read-only) Meta review status. Only APPROVED templates can be sent. |
1625
- | variables | array<string> | yes | (Read-only) Declared variable names/placeholders. A message supplies values keyed by these names via WhatsappOutboundMessage.template.variables. |
1635
+ | parameters | array<object> | yes | (Read-only) Declared parameters with component placement. Supersedes the flat `variables` list (GH#46) — lets the send group values into the correct header/body/button components. A message supplies values keyed by `name` via WhatsappOutboundMessage.template.variables. |
1636
+ | parameters[].name | string | yes | Parameter name/placeholder (e.g. "1"). Matches a key in WhatsappOutboundMessage.template.variables. |
1637
+ | parameters[].component | WhatsappTemplateComponent | yes | Which template component this parameter targets: header | body | button. |
1638
+ | parameters[].buttonIndex | integer | no | 0-based button position. Present only when component=button (Meta requires a string index at send time). |
1639
+ | parameters[].buttonSubType | WhatsappButtonSubType | no | Button sub-type (url | quick_reply). Present only when component=button. |
1640
+ | parameters[].buttonUrlBase | string | no | For component=button + buttonSubType=url: the template's configured button URL incl. the placeholder, e.g. "https://zahoui-review.web.app/{{1}}". Meta requires the variable at the URL end, so the supplied value is the suffix appended after the static prefix. Lets the dashboard display the resulting link (GH#51). |
1626
1641
  | preview | string | yes | (Read-only) Rendered preview text for display in the dashboard picker. |
1627
1642
 
1628
1643
  Example:
1629
1644
  ```json
1630
1645
  {
1631
1646
  "id": null,
1647
+ "waba": "waba",
1648
+ "wabaId": "wab_ref123",
1632
1649
  "name": "Amadou Diallo",
1633
1650
  "language": "language",
1634
1651
  "category": "category",
1635
1652
  "status": "status",
1636
- "variables": [
1637
- "example"
1653
+ "parameters": [
1654
+ {
1655
+ "name": "Amadou Diallo",
1656
+ "component": "component"
1657
+ }
1638
1658
  ],
1639
1659
  "preview": "preview"
1640
1660
  }
@@ -274,6 +274,21 @@ components:
274
274
  - val
275
275
  description: Human-readable WABA label identifying which Meta business number
276
276
  received the message (GH#36).
277
+ WhatsappButtonSubType:
278
+ type: string
279
+ enum:
280
+ - url
281
+ - quick_reply
282
+ description: Sub-type of a WhatsApp template button parameter. Set when WhatsappTemplateParameter.component
283
+ === "button" — maps to Meta `components[].sub_type` (GH#46).
284
+ WhatsappTemplateComponent:
285
+ type: string
286
+ enum:
287
+ - header
288
+ - body
289
+ - button
290
+ description: WhatsApp template component a parameter targets. Determines which
291
+ Meta `components` entry the supplied value is placed in at send time (GH#46).
277
292
  WhatsappTemplateStatus:
278
293
  type: string
279
294
  enum:
@@ -4804,10 +4819,20 @@ components:
4804
4819
  properties:
4805
4820
  id:
4806
4821
  readOnly: true
4807
- description: (Read-only) Firestore document ID — composite `{name}__{language}`.
4822
+ description: (Read-only) Firestore document ID — composite `{waba}__{name}__{language}`.
4808
4823
  type:
4809
4824
  - string
4810
4825
  - 'null'
4826
+ waba:
4827
+ $ref: '#/components/schemas/WabaLabel'
4828
+ description: (Read-only) WABA label this template is approved on. Templates
4829
+ are WABA-scoped. Mirrors WhatsappOutboundMessage.waba.
4830
+ readOnly: true
4831
+ wabaId:
4832
+ type: string
4833
+ readOnly: true
4834
+ description: (Read-only) Meta WABA ID this template belongs to. The sender
4835
+ must verify its phone number belongs to this WABA before using the template.
4811
4836
  name:
4812
4837
  type: string
4813
4838
  readOnly: true
@@ -4826,29 +4851,66 @@ components:
4826
4851
  description: (Read-only) Meta review status. Only APPROVED templates can
4827
4852
  be sent.
4828
4853
  readOnly: true
4829
- variables:
4854
+ parameters:
4830
4855
  type: array
4831
4856
  items:
4832
- type: string
4857
+ type: object
4858
+ properties:
4859
+ name:
4860
+ type: string
4861
+ description: Parameter name/placeholder (e.g. "1"). Matches a key
4862
+ in WhatsappOutboundMessage.template.variables.
4863
+ component:
4864
+ $ref: '#/components/schemas/WhatsappTemplateComponent'
4865
+ description: 'Which template component this parameter targets: header
4866
+ | body | button.'
4867
+ buttonIndex:
4868
+ description: 0-based button position. Present only when component=button
4869
+ (Meta requires a string index at send time).
4870
+ type: integer
4871
+ minimum: -9007199254740991
4872
+ maximum: 9007199254740991
4873
+ buttonSubType:
4874
+ $ref: '#/components/schemas/WhatsappButtonSubType'
4875
+ description: Button sub-type (url | quick_reply). Present only when
4876
+ component=button.
4877
+ buttonUrlBase:
4878
+ description: 'For component=button + buttonSubType=url: the template''s
4879
+ configured button URL incl. the placeholder, e.g. "https://zahoui-review.web.app/{{1}}".
4880
+ Meta requires the variable at the URL end, so the supplied value
4881
+ is the suffix appended after the static prefix. Lets the dashboard
4882
+ display the resulting link (GH#51).'
4883
+ type: string
4884
+ required:
4885
+ - name
4886
+ - component
4887
+ additionalProperties: false
4888
+ description: Declared WhatsApp template parameter with component placement
4889
+ (GH#46) and, for URL buttons, the configured URL pattern (GH#51).
4833
4890
  readOnly: true
4834
- description: (Read-only) Declared variable names/placeholders. A message
4835
- supplies values keyed by these names via WhatsappOutboundMessage.template.variables.
4891
+ description: (Read-only) Declared parameters with component placement. Supersedes
4892
+ the flat `variables` list (GH#46) lets the send group values into the
4893
+ correct header/body/button components. A message supplies values keyed
4894
+ by `name` via WhatsappOutboundMessage.template.variables.
4836
4895
  preview:
4837
4896
  type: string
4838
4897
  readOnly: true
4839
4898
  description: (Read-only) Rendered preview text for display in the dashboard
4840
4899
  picker.
4841
4900
  required:
4901
+ - waba
4902
+ - wabaId
4842
4903
  - name
4843
4904
  - language
4844
4905
  - category
4845
4906
  - status
4846
- - variables
4907
+ - parameters
4847
4908
  - preview
4848
4909
  additionalProperties: false
4849
4910
  description: 'WhatsappTemplate — Meta-approved template synced from the WhatsApp
4850
- Business API (GH#43). Collection: whatsapp_templates/{docId}. Backend-synced;
4851
- dashboard reads only.'
4911
+ Business API (GH#43; parameter placement GH#46). Collection: whatsapp_templates/{docId},
4912
+ doc ID `{waba}__{name}__{language}`. WABA-scoped; backend-synced; dashboard
4913
+ reads only.'
4852
4914
  PaymentSummary:
4853
4915
  type: object
4854
4916
  properties:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "description": "@valets/schema \u2014 consolidated schema bundle",
4
- "generated": "2026-05-27T01:15:18.169259+00:00",
4
+ "generated": "2026-05-27T14:03:20.868899+00:00",
5
5
  "schemas": {
6
6
  "allowed-user": {
7
7
  "type": "object",
@@ -5565,6 +5565,14 @@
5565
5565
  ],
5566
5566
  "description": "Human-readable WABA label identifying which Meta business number received the message (GH#36)."
5567
5567
  },
5568
+ "whatsapp-button-sub-type": {
5569
+ "type": "string",
5570
+ "enum": [
5571
+ "url",
5572
+ "quick_reply"
5573
+ ],
5574
+ "description": "Sub-type of a WhatsApp template button parameter. Set when WhatsappTemplateParameter.component === \"button\" \u2014 maps to Meta `components[].sub_type` (GH#46)."
5575
+ },
5568
5576
  "whatsapp-inbound-message": {
5569
5577
  "type": "object",
5570
5578
  "properties": {
@@ -6052,12 +6060,22 @@
6052
6060
  "properties": {
6053
6061
  "id": {
6054
6062
  "readOnly": true,
6055
- "description": "(Read-only) Firestore document ID \u2014 composite `{name}__{language}`.",
6063
+ "description": "(Read-only) Firestore document ID \u2014 composite `{waba}__{name}__{language}`.",
6056
6064
  "type": [
6057
6065
  "string",
6058
6066
  "null"
6059
6067
  ]
6060
6068
  },
6069
+ "waba": {
6070
+ "$ref": "#/definitions/waba-label",
6071
+ "description": "(Read-only) WABA label this template is approved on. Templates are WABA-scoped. Mirrors WhatsappOutboundMessage.waba.",
6072
+ "readOnly": true
6073
+ },
6074
+ "wabaId": {
6075
+ "type": "string",
6076
+ "readOnly": true,
6077
+ "description": "(Read-only) Meta WABA ID this template belongs to. The sender must verify its phone number belongs to this WABA before using the template."
6078
+ },
6061
6079
  "name": {
6062
6080
  "type": "string",
6063
6081
  "readOnly": true,
@@ -6078,13 +6096,43 @@
6078
6096
  "description": "(Read-only) Meta review status. Only APPROVED templates can be sent.",
6079
6097
  "readOnly": true
6080
6098
  },
6081
- "variables": {
6099
+ "parameters": {
6082
6100
  "type": "array",
6083
6101
  "items": {
6084
- "type": "string"
6102
+ "type": "object",
6103
+ "properties": {
6104
+ "name": {
6105
+ "type": "string",
6106
+ "description": "Parameter name/placeholder (e.g. \"1\"). Matches a key in WhatsappOutboundMessage.template.variables."
6107
+ },
6108
+ "component": {
6109
+ "$ref": "#/definitions/whatsapp-template-component",
6110
+ "description": "Which template component this parameter targets: header | body | button."
6111
+ },
6112
+ "buttonIndex": {
6113
+ "description": "0-based button position. Present only when component=button (Meta requires a string index at send time).",
6114
+ "type": "integer",
6115
+ "minimum": -9007199254740991,
6116
+ "maximum": 9007199254740991
6117
+ },
6118
+ "buttonSubType": {
6119
+ "$ref": "#/definitions/whatsapp-button-sub-type",
6120
+ "description": "Button sub-type (url | quick_reply). Present only when component=button."
6121
+ },
6122
+ "buttonUrlBase": {
6123
+ "description": "For component=button + buttonSubType=url: the template's configured button URL incl. the placeholder, e.g. \"https://zahoui-review.web.app/{{1}}\". Meta requires the variable at the URL end, so the supplied value is the suffix appended after the static prefix. Lets the dashboard display the resulting link (GH#51).",
6124
+ "type": "string"
6125
+ }
6126
+ },
6127
+ "required": [
6128
+ "name",
6129
+ "component"
6130
+ ],
6131
+ "additionalProperties": false,
6132
+ "description": "Declared WhatsApp template parameter with component placement (GH#46) and, for URL buttons, the configured URL pattern (GH#51)."
6085
6133
  },
6086
6134
  "readOnly": true,
6087
- "description": "(Read-only) Declared variable names/placeholders. A message supplies values keyed by these names via WhatsappOutboundMessage.template.variables."
6135
+ "description": "(Read-only) Declared parameters with component placement. Supersedes the flat `variables` list (GH#46) \u2014 lets the send group values into the correct header/body/button components. A message supplies values keyed by `name` via WhatsappOutboundMessage.template.variables."
6088
6136
  },
6089
6137
  "preview": {
6090
6138
  "type": "string",
@@ -6093,27 +6141,43 @@
6093
6141
  }
6094
6142
  },
6095
6143
  "required": [
6144
+ "waba",
6145
+ "wabaId",
6096
6146
  "name",
6097
6147
  "language",
6098
6148
  "category",
6099
6149
  "status",
6100
- "variables",
6150
+ "parameters",
6101
6151
  "preview"
6102
6152
  ],
6103
6153
  "additionalProperties": false,
6104
- "description": "WhatsappTemplate \u2014 Meta-approved template synced from the WhatsApp Business API (GH#43). Collection: whatsapp_templates/{docId}. Backend-synced; dashboard reads only.",
6154
+ "description": "WhatsappTemplate \u2014 Meta-approved template synced from the WhatsApp Business API (GH#43; parameter placement GH#46). Collection: whatsapp_templates/{docId}, doc ID `{waba}__{name}__{language}`. WABA-scoped; backend-synced; dashboard reads only.",
6105
6155
  "example": {
6106
6156
  "id": null,
6157
+ "waba": "waba",
6158
+ "wabaId": "wab_ref123",
6107
6159
  "name": "Amadou Diallo",
6108
6160
  "language": "language",
6109
6161
  "category": "category",
6110
6162
  "status": "status",
6111
- "variables": [
6112
- "example"
6163
+ "parameters": [
6164
+ {
6165
+ "name": "Amadou Diallo",
6166
+ "component": "component"
6167
+ }
6113
6168
  ],
6114
6169
  "preview": "preview"
6115
6170
  }
6116
6171
  },
6172
+ "whatsapp-template-component": {
6173
+ "type": "string",
6174
+ "enum": [
6175
+ "header",
6176
+ "body",
6177
+ "button"
6178
+ ],
6179
+ "description": "WhatsApp template component a parameter targets. Determines which Meta `components` entry the supplied value is placed in at send time (GH#46)."
6180
+ },
6117
6181
  "whatsapp-template-status": {
6118
6182
  "type": "string",
6119
6183
  "enum": [