@ingenx-io/valets-schema-mcp-server 0.2.0 → 0.2.1

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 +140 -34
  62. package/data/static/llms.txt +24 -5
  63. package/data/static/openapi.yaml +63 -8
  64. package/data/static/schemas.json +69 -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 13:06:59 +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 13:06:59 +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 13:06:59 +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,19 @@ 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
+ - [9. Property `preview`](#preview)
37
48
 
38
49
  | | |
39
50
  | ------------------------- | ------------------------------- |
@@ -42,17 +53,19 @@ sidebar_position: 31
42
53
  | **Additional properties** | Not allowed |
43
54
  | **Defined in** | #/definitions/whatsapp-template |
44
55
 
45
- **Description:** WhatsappTemplate — Meta-approved template synced from the WhatsApp Business API (GH#43). Collection: whatsapp_templates/\{docId\}. Backend-synced; dashboard reads only.
56
+ **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
57
 
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. |
58
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
59
+ | ---------------------------- | ------- | ---------------- | ---------- | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
60
+ | - [id](#id ) | No | string or null | No | - | (Read-only) Firestore document ID — composite \`\{waba\}__\{name\}__\{language\}\`. |
61
+ | + [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. |
62
+ | + [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. |
63
+ | + [name](#name ) | No | string | No | - | (Read-only) Template name as registered with Meta. |
64
+ | + [language](#language ) | No | string | No | - | (Read-only) Template language/locale code (e.g. "en", "fr"). |
65
+ | + [category](#category ) | No | string | No | - | (Read-only) Meta template category (e.g. MARKETING, UTILITY, AUTHENTICATION). |
66
+ | + [status](#status ) | No | enum (of string) | No | In #/definitions/whatsapp-template-status | (Read-only) Meta review status. Only APPROVED templates can be sent. |
67
+ | + [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. |
68
+ | + [preview](#preview ) | No | string | No | - | (Read-only) Rendered preview text for display in the dashboard picker. |
56
69
 
57
70
  ## <a name="id"></a>1. Property `id`
58
71
 
@@ -61,13 +74,44 @@ sidebar_position: 31
61
74
  | **Type** | `string or null` |
62
75
  | **Required** | No |
63
76
 
64
- **Description:** (Read-only) Firestore document ID — composite `\{name\}__\{language\}`.
77
+ **Description:** (Read-only) Firestore document ID — composite `\{waba\}__\{name\}__\{language\}`.
65
78
 
66
79
  :::warning Server-set
67
80
  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
81
  :::
69
82
 
70
- ## <a name="name"></a>2. Property `name`
83
+ ## <a name="waba"></a>2. Property `waba`
84
+
85
+ | | |
86
+ | -------------- | ------------------------ |
87
+ | **Type** | `enum (of string)` |
88
+ | **Required** | Yes |
89
+ | **Defined in** | #/definitions/waba-label |
90
+
91
+ **Description:** (Read-only) WABA label this template is approved on. Templates are WABA-scoped. Mirrors WhatsappOutboundMessage.waba.
92
+
93
+ Must be one of:
94
+ * "cmz"
95
+ * "val"
96
+
97
+ :::warning Server-set
98
+ 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.
99
+ :::
100
+
101
+ ## <a name="wabaId"></a>3. Property `wabaId`
102
+
103
+ | | |
104
+ | ------------ | -------- |
105
+ | **Type** | `string` |
106
+ | **Required** | Yes |
107
+
108
+ **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.
109
+
110
+ :::warning Server-set
111
+ 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.
112
+ :::
113
+
114
+ ## <a name="name"></a>4. Property `name`
71
115
 
72
116
  | | |
73
117
  | ------------ | -------- |
@@ -80,7 +124,7 @@ Do not include in write requests. This field is set exclusively by the server (F
80
124
  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
125
  :::
82
126
 
83
- ## <a name="language"></a>3. Property `language`
127
+ ## <a name="language"></a>5. Property `language`
84
128
 
85
129
  | | |
86
130
  | ------------ | -------- |
@@ -93,7 +137,7 @@ Do not include in write requests. This field is set exclusively by the server (F
93
137
  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
138
  :::
95
139
 
96
- ## <a name="category"></a>4. Property `category`
140
+ ## <a name="category"></a>6. Property `category`
97
141
 
98
142
  | | |
99
143
  | ------------ | -------- |
@@ -106,7 +150,7 @@ Do not include in write requests. This field is set exclusively by the server (F
106
150
  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
151
  :::
108
152
 
109
- ## <a name="status"></a>5. Property `status`
153
+ ## <a name="status"></a>7. Property `status`
110
154
 
111
155
  | | |
112
156
  | -------------- | -------------------------------------- |
@@ -128,14 +172,14 @@ Must be one of:
128
172
  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
173
  :::
130
174
 
131
- ## <a name="variables"></a>6. Property `variables`
175
+ ## <a name="parameters"></a>8. Property `parameters`
132
176
 
133
177
  | | |
134
178
  | ------------ | ----------------- |
135
- | **Type** | `array of string` |
179
+ | **Type** | `array of object` |
136
180
  | **Required** | Yes |
137
181
 
138
- **Description:** (Read-only) Declared variable names/placeholders. A message supplies values keyed by these names via WhatsappOutboundMessage.template.variables.
182
+ **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
183
 
140
184
  | | Array restrictions |
141
185
  | -------------------- | ------------------ |
@@ -145,22 +189,84 @@ Do not include in write requests. This field is set exclusively by the server (F
145
189
  | **Additional items** | False |
146
190
  | **Tuple validation** | See below |
147
191
 
148
- | Each item of this array must be | Description |
149
- | ----------------------------------- | ----------- |
150
- | [variables items](#variables_items) | - |
192
+ | Each item of this array must be | Description |
193
+ | ------------------------------------- | ---------------------------------------------------------------------- |
194
+ | [parameters items](#parameters_items) | Declared WhatsApp template parameter with component placement (GH#46). |
195
+
196
+ ### <a name="parameters_items"></a>8.1. parameters items
197
+
198
+ | | |
199
+ | ------------------------- | ----------- |
200
+ | **Type** | `object` |
201
+ | **Required** | No |
202
+ | **Additional properties** | Not allowed |
151
203
 
152
- ### <a name="variables_items"></a>6.1. variables items
204
+ **Description:** Declared WhatsApp template parameter with component placement (GH#46).
205
+
206
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
207
+ | --------------------------------------------------- | ------- | ---------------- | ---------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
208
+ | + [name](#parameters_items_name ) | No | string | No | - | Parameter name/placeholder (e.g. "1"). Matches a key in WhatsappOutboundMessage.template.variables. |
209
+ | + [component](#parameters_items_component ) | No | enum (of string) | No | In #/definitions/whatsapp-template-component | Which template component this parameter targets: header \| body \| button. |
210
+ | - [buttonIndex](#parameters_items_buttonIndex ) | No | integer | No | - | 0-based button position. Present only when component=button (Meta requires a string index at send time). |
211
+ | - [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. |
212
+
213
+ #### <a name="parameters_items_name"></a>8.1.1. Property `name`
153
214
 
154
215
  | | |
155
216
  | ------------ | -------- |
156
217
  | **Type** | `string` |
157
- | **Required** | No |
218
+ | **Required** | Yes |
219
+
220
+ **Description:** Parameter name/placeholder (e.g. "1"). Matches a key in WhatsappOutboundMessage.template.variables.
221
+
222
+ #### <a name="parameters_items_component"></a>8.1.2. Property `component`
223
+
224
+ | | |
225
+ | -------------- | ----------------------------------------- |
226
+ | **Type** | `enum (of string)` |
227
+ | **Required** | Yes |
228
+ | **Defined in** | #/definitions/whatsapp-template-component |
229
+
230
+ **Description:** Which template component this parameter targets: header | body | button.
231
+
232
+ Must be one of:
233
+ * "header"
234
+ * "body"
235
+ * "button"
236
+
237
+ #### <a name="parameters_items_buttonIndex"></a>8.1.3. Property `buttonIndex`
238
+
239
+ | | |
240
+ | ------------ | --------- |
241
+ | **Type** | `integer` |
242
+ | **Required** | No |
243
+
244
+ **Description:** 0-based button position. Present only when component=button (Meta requires a string index at send time).
245
+
246
+ | Restrictions | |
247
+ | ------------ | ---------------------- |
248
+ | **Minimum** | &ge; -9007199254740991 |
249
+ | **Maximum** | &le; 9007199254740991 |
250
+
251
+ #### <a name="parameters_items_buttonSubType"></a>8.1.4. Property `buttonSubType`
252
+
253
+ | | |
254
+ | -------------- | -------------------------------------- |
255
+ | **Type** | `enum (of string)` |
256
+ | **Required** | No |
257
+ | **Defined in** | #/definitions/whatsapp-button-sub-type |
258
+
259
+ **Description:** Button sub-type (url | quick_reply). Present only when component=button.
260
+
261
+ Must be one of:
262
+ * "url"
263
+ * "quick_reply"
158
264
 
159
265
  :::warning Server-set
160
266
  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
267
  :::
162
268
 
163
- ## <a name="preview"></a>7. Property `preview`
269
+ ## <a name="preview"></a>9. Property `preview`
164
270
 
165
271
  | | |
166
272
  | ------------ | -------- |
@@ -170,7 +276,7 @@ Do not include in write requests. This field is set exclusively by the server (F
170
276
  **Description:** (Read-only) Rendered preview text for display in the dashboard picker.
171
277
 
172
278
  ----------------------------------------------------------------------------------------------------------------------------
173
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 01:15:18 +0000
279
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 13:06:59 +0000
174
280
 
175
281
  :::warning Server-set
176
282
  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,39 @@ 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. |
1626
1640
  | preview | string | yes | (Read-only) Rendered preview text for display in the dashboard picker. |
1627
1641
 
1628
1642
  Example:
1629
1643
  ```json
1630
1644
  {
1631
1645
  "id": null,
1646
+ "waba": "waba",
1647
+ "wabaId": "wab_ref123",
1632
1648
  "name": "Amadou Diallo",
1633
1649
  "language": "language",
1634
1650
  "category": "category",
1635
1651
  "status": "status",
1636
- "variables": [
1637
- "example"
1652
+ "parameters": [
1653
+ {
1654
+ "name": "Amadou Diallo",
1655
+ "component": "component"
1656
+ }
1638
1657
  ],
1639
1658
  "preview": "preview"
1640
1659
  }
@@ -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,59 @@ 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
+ required:
4878
+ - name
4879
+ - component
4880
+ additionalProperties: false
4881
+ description: Declared WhatsApp template parameter with component placement
4882
+ (GH#46).
4833
4883
  readOnly: true
4834
- description: (Read-only) Declared variable names/placeholders. A message
4835
- supplies values keyed by these names via WhatsappOutboundMessage.template.variables.
4884
+ description: (Read-only) Declared parameters with component placement. Supersedes
4885
+ the flat `variables` list (GH#46) lets the send group values into the
4886
+ correct header/body/button components. A message supplies values keyed
4887
+ by `name` via WhatsappOutboundMessage.template.variables.
4836
4888
  preview:
4837
4889
  type: string
4838
4890
  readOnly: true
4839
4891
  description: (Read-only) Rendered preview text for display in the dashboard
4840
4892
  picker.
4841
4893
  required:
4894
+ - waba
4895
+ - wabaId
4842
4896
  - name
4843
4897
  - language
4844
4898
  - category
4845
4899
  - status
4846
- - variables
4900
+ - parameters
4847
4901
  - preview
4848
4902
  additionalProperties: false
4849
4903
  description: 'WhatsappTemplate — Meta-approved template synced from the WhatsApp
4850
- Business API (GH#43). Collection: whatsapp_templates/{docId}. Backend-synced;
4851
- dashboard reads only.'
4904
+ Business API (GH#43; parameter placement GH#46). Collection: whatsapp_templates/{docId},
4905
+ doc ID `{waba}__{name}__{language}`. WABA-scoped; backend-synced; dashboard
4906
+ reads only.'
4852
4907
  PaymentSummary:
4853
4908
  type: object
4854
4909
  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-27T13:06:59.435619+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,39 @@
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
+ },
6123
+ "required": [
6124
+ "name",
6125
+ "component"
6126
+ ],
6127
+ "additionalProperties": false,
6128
+ "description": "Declared WhatsApp template parameter with component placement (GH#46)."
6085
6129
  },
6086
6130
  "readOnly": true,
6087
- "description": "(Read-only) Declared variable names/placeholders. A message supplies values keyed by these names via WhatsappOutboundMessage.template.variables."
6131
+ "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
6132
  },
6089
6133
  "preview": {
6090
6134
  "type": "string",
@@ -6093,27 +6137,43 @@
6093
6137
  }
6094
6138
  },
6095
6139
  "required": [
6140
+ "waba",
6141
+ "wabaId",
6096
6142
  "name",
6097
6143
  "language",
6098
6144
  "category",
6099
6145
  "status",
6100
- "variables",
6146
+ "parameters",
6101
6147
  "preview"
6102
6148
  ],
6103
6149
  "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.",
6150
+ "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
6151
  "example": {
6106
6152
  "id": null,
6153
+ "waba": "waba",
6154
+ "wabaId": "wab_ref123",
6107
6155
  "name": "Amadou Diallo",
6108
6156
  "language": "language",
6109
6157
  "category": "category",
6110
6158
  "status": "status",
6111
- "variables": [
6112
- "example"
6159
+ "parameters": [
6160
+ {
6161
+ "name": "Amadou Diallo",
6162
+ "component": "component"
6163
+ }
6113
6164
  ],
6114
6165
  "preview": "preview"
6115
6166
  }
6116
6167
  },
6168
+ "whatsapp-template-component": {
6169
+ "type": "string",
6170
+ "enum": [
6171
+ "header",
6172
+ "body",
6173
+ "button"
6174
+ ],
6175
+ "description": "WhatsApp template component a parameter targets. Determines which Meta `components` entry the supplied value is placed in at send time (GH#46)."
6176
+ },
6117
6177
  "whatsapp-template-status": {
6118
6178
  "type": "string",
6119
6179
  "enum": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ingenx-io/valets-schema-mcp-server",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "MCP server exposing @valets/schema documentation to AI agents",
5
5
  "type": "module",
6
6
  "main": "index.js",