@ingenx-io/valets-schema-mcp-server 0.1.7 → 0.1.9

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 (58) hide show
  1. package/data/docs/enums/attention-status.md +1 -1
  2. package/data/docs/enums/booking-status.md +1 -1
  3. package/data/docs/enums/customer-payment-status.md +1 -1
  4. package/data/docs/enums/customer-payment-target-type.md +1 -1
  5. package/data/docs/enums/delivery-type.md +1 -1
  6. package/data/docs/enums/deployment-link-type.md +1 -1
  7. package/data/docs/enums/event-status.md +1 -1
  8. package/data/docs/enums/fulfillment-status.md +1 -1
  9. package/data/docs/enums/loyalty-transaction-type.md +1 -1
  10. package/data/docs/enums/order-status.md +1 -1
  11. package/data/docs/enums/outbound-message-kind.md +22 -0
  12. package/data/docs/enums/outbound-message-status.md +25 -0
  13. package/data/docs/enums/payment-method.md +2 -2
  14. package/data/docs/enums/payment-proof-status.md +2 -2
  15. package/data/docs/enums/payment-status.md +2 -2
  16. package/data/docs/enums/pending-issue.md +2 -2
  17. package/data/docs/enums/return-status.md +2 -2
  18. package/data/docs/enums/session-status.md +2 -2
  19. package/data/docs/enums/site-status.md +2 -2
  20. package/data/docs/enums/stocktake-frequency.md +2 -2
  21. package/data/docs/enums/stocktake-item-status.md +2 -2
  22. package/data/docs/enums/stocktake-status.md +2 -2
  23. package/data/docs/enums/ticket-status.md +2 -2
  24. package/data/docs/enums/waba-label.md +2 -2
  25. package/data/docs/index.md +5 -2
  26. package/data/docs/models/allowed-user.md +1 -1
  27. package/data/docs/models/analytics-backfill.md +1 -1
  28. package/data/docs/models/analytics-daily.md +1 -1
  29. package/data/docs/models/analytics-event.md +1 -1
  30. package/data/docs/models/analytics-hourly.md +1 -1
  31. package/data/docs/models/booking-version.md +1 -1
  32. package/data/docs/models/booking.md +1 -1
  33. package/data/docs/models/customer-payment-allocation.md +1 -1
  34. package/data/docs/models/customer-payment.md +1 -1
  35. package/data/docs/models/customer.md +1 -1
  36. package/data/docs/models/event.md +1 -1
  37. package/data/docs/models/loyalty-config.md +1 -1
  38. package/data/docs/models/loyalty-reward.md +1 -1
  39. package/data/docs/models/loyalty-status.md +1 -1
  40. package/data/docs/models/loyalty-transaction.md +1 -1
  41. package/data/docs/models/magic-link-request.md +1 -1
  42. package/data/docs/models/metrics-current.md +1 -1
  43. package/data/docs/models/metrics-daily.md +1 -1
  44. package/data/docs/models/metrics-monthly.md +1 -1
  45. package/data/docs/models/order-item.md +1 -1
  46. package/data/docs/models/order.md +1 -1
  47. package/data/docs/models/sale.md +1 -1
  48. package/data/docs/models/site-payment.md +1 -1
  49. package/data/docs/models/site.md +1 -1
  50. package/data/docs/models/stocktake-item.md +1 -1
  51. package/data/docs/models/stocktake.md +1 -1
  52. package/data/docs/models/ticket.md +1 -1
  53. package/data/docs/models/whatsapp-inbound-message.md +20 -20
  54. package/data/docs/models/whatsapp-outbound-message.md +365 -0
  55. package/data/static/llms.txt +55 -3
  56. package/data/static/openapi.yaml +139 -4
  57. package/data/static/schemas.json +160 -4
  58. package/package.json +1 -1
@@ -546,7 +546,7 @@ Do not include in write requests. This field is set exclusively by the server (F
546
546
  **Description:** Timestamp of the most recent analytics event seen for this site.
547
547
 
548
548
  ----------------------------------------------------------------------------------------------------------------------------
549
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-15 at 16:32:39 +0000
549
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-16 at 00:18:16 +0000
550
550
 
551
551
  :::warning Server-set
552
552
  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.
@@ -497,4 +497,4 @@ Read-time hint snapshot of the verifier's display name (GH#29 §3 / Q10).
497
497
  | **Required** | No |
498
498
 
499
499
  ----------------------------------------------------------------------------------------------------------------------------
500
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-15 at 16:32:39 +0000
500
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-16 at 00:18:16 +0000
@@ -642,7 +642,7 @@ Read-time hint snapshot of the completer's display name (GH#29 §3 / Q10).
642
642
  | **Required** | No |
643
643
 
644
644
  ----------------------------------------------------------------------------------------------------------------------------
645
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-15 at 16:32:39 +0000
645
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-16 at 00:18:16 +0000
646
646
 
647
647
  :::warning Server-set
648
648
  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.
@@ -388,7 +388,7 @@ Do not include in write requests. This field is set exclusively by the server (F
388
388
  **Description:** (Immutable) FK → User/staff UID who created this ticket.
389
389
 
390
390
  ----------------------------------------------------------------------------------------------------------------------------
391
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-15 at 16:32:39 +0000
391
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-16 at 00:18:16 +0000
392
392
 
393
393
  :::info Immutable
394
394
  Set at creation only. This field cannot be modified after the document is created. Include it in CREATE payloads; omit it (or leave unchanged) in UPDATE payloads.
@@ -60,23 +60,23 @@ sidebar_position: 28
60
60
  | **Additional properties** | Not allowed |
61
61
  | **Defined in** | #/definitions/whatsapp-inbound-message |
62
62
 
63
- **Description:** WhatsappInboundMessage — inbound WhatsApp message persisted from Meta Cloud API webhook (GH#36). Collection: whatsapp_inbound_messages/\{docId\} in ratenplate project. Top-level scope: company resolution happens post-ingestion.
64
-
65
- | Property | Pattern | Type | Deprecated | Definition | Title/Description |
66
- | ---------------------------- | ------- | ---------------- | ---------- | ------------------------------------ | --------------------------------------------------------------------------------------------------------------- |
67
- | - [id](#id ) | No | string or null | No | - | (Read-only) Firestore document ID — wamid from Meta Cloud API. |
68
- | + [wabaId](#wabaId ) | No | string | No | - | (Immutable) Meta WABA ID identifying which business number received the message. |
69
- | + [waba](#waba ) | No | enum (of string) | No | In #/definitions/waba-label | (Immutable) Human-readable WABA label (cmz \| val). See WabaLabel enum. |
70
- | + [messageId](#messageId ) | No | string | No | - | (Immutable) WhatsApp message ID (wamid) returned by Meta — mirrors the document ID. |
71
- | + [from](#from ) | No | string | No | - | (Immutable) Sender phone number in E.164 format. |
72
- | + [type](#type ) | No | Combination | No | - | (Immutable) Meta message type. |
73
- | + [timestamp](#timestamp ) | No | object | No | In #/definitions/firestore-timestamp | (Immutable) Message timestamp as reported by Meta. |
74
- | + [receivedAt](#receivedAt ) | No | object | No | In #/definitions/firestore-timestamp | (Read-only) Server-side ingestion time set by the Cloud Function. |
75
- | - [text](#text ) | No | string or null | No | - | Message body text. Present on type=text messages only. |
76
- | - [mediaId](#mediaId ) | No | string or null | No | - | Meta media ID. Present on image, audio, video, document, sticker messages. |
77
- | - [caption](#caption ) | No | string or null | No | - | Media caption text. Present when the sender included a caption. |
78
- | - [storageUrl](#storageUrl ) | No | string or null | No | - | Durable Cloud Storage URL for the downloaded media binary. Present after the CF downloads and stores the media. |
79
- | - [context](#context ) | No | object or null | No | - | Reply/forward context. Present on replies and forwarded messages. |
63
+ **Description:** WhatsappInboundMessage — inbound WhatsApp message persisted from Meta Cloud API webhook (GH#36). Collection: whatsapp_inbound_messages/\{docId\}. Top-level scope: company resolution happens post-ingestion.
64
+
65
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
66
+ | ---------------------------- | ------- | ---------------- | ---------- | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- |
67
+ | - [id](#id ) | No | string or null | No | - | (Read-only) Firestore document ID — wamid from Meta Cloud API. |
68
+ | + [wabaId](#wabaId ) | No | string | No | - | (Immutable) Meta WABA ID identifying which business number received the message. |
69
+ | + [waba](#waba ) | No | enum (of string) | No | In #/definitions/waba-label | (Immutable) Human-readable WABA label (cmz \| val). See WabaLabel enum. |
70
+ | + [messageId](#messageId ) | No | string | No | - | (Immutable) WhatsApp message ID (wamid) returned by Meta — mirrors the document ID. |
71
+ | + [from](#from ) | No | string | No | - | (Immutable) Sender phone number in E.164 format. |
72
+ | + [type](#type ) | No | Combination | No | - | (Immutable) Meta message type. |
73
+ | + [timestamp](#timestamp ) | No | object | No | In #/definitions/firestore-timestamp | (Immutable) Message timestamp as reported by Meta. |
74
+ | + [receivedAt](#receivedAt ) | No | object | No | In #/definitions/firestore-timestamp | (Read-only) Server-side ingestion timestamp. |
75
+ | - [text](#text ) | No | string or null | No | - | Message body text. Present on type=text messages only. |
76
+ | - [mediaId](#mediaId ) | No | string or null | No | - | Meta media ID. Present on image, audio, video, document, sticker messages. |
77
+ | - [caption](#caption ) | No | string or null | No | - | Media caption text. Present when the sender included a caption. |
78
+ | - [storageUrl](#storageUrl ) | No | string or null | No | - | Durable Cloud Storage URL for the downloaded media binary. Present after the media has been fetched and stored server-side. |
79
+ | - [context](#context ) | No | object or null | No | - | Reply/forward context. Present on replies and forwarded messages. |
80
80
 
81
81
  ## <a name="id"></a>1. Property `id`
82
82
 
@@ -250,7 +250,7 @@ Set at creation only. This field cannot be modified after the document is create
250
250
  | **Additional properties** | Not allowed |
251
251
  | **Defined in** | #/definitions/firestore-timestamp |
252
252
 
253
- **Description:** (Read-only) Server-side ingestion time set by the Cloud Function.
253
+ **Description:** (Read-only) Server-side ingestion timestamp.
254
254
 
255
255
  | Property | Pattern | Type | Deprecated | Definition | Title/Description |
256
256
  | ------------------------------------------ | ------- | ------- | ---------- | ---------- | ----------------- |
@@ -319,7 +319,7 @@ Do not include in write requests. This field is set exclusively by the server (F
319
319
  | **Type** | `string or null` |
320
320
  | **Required** | No |
321
321
 
322
- **Description:** Durable Cloud Storage URL for the downloaded media binary. Present after the CF downloads and stores the media.
322
+ **Description:** Durable Cloud Storage URL for the downloaded media binary. Present after the media has been fetched and stored server-side.
323
323
 
324
324
  ## <a name="context"></a>13. Property `context`
325
325
 
@@ -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-15 at 16:32:39 +0000
369
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-16 at 00:18:16 +0000
@@ -0,0 +1,365 @@
1
+ ---
2
+ title: "WhatsappOutboundMessage"
3
+ sidebar_label: "WhatsappOutboundMessage"
4
+ sidebar_position: 29
5
+ ---
6
+
7
+ # WhatsappOutboundMessage
8
+
9
+ <details>
10
+ <summary>Example JSON</summary>
11
+
12
+ ```json
13
+ {
14
+ "id": null,
15
+ "messageId": "mes_ref123",
16
+ "to": "to",
17
+ "waba": "waba",
18
+ "wabaId": "wab_ref123",
19
+ "sentAt": "sentAt",
20
+ "phoneNumberId": "pho_ref123",
21
+ "kind": "kind",
22
+ "templateName": "templateName",
23
+ "status": "status",
24
+ "contactWaId": null,
25
+ "appId": null,
26
+ "orderUuid": null,
27
+ "statusUpdatedAt": "statusUpdatedAt",
28
+ "failureCode": null,
29
+ "failureErrors": null
30
+ }
31
+ ```
32
+
33
+ </details>
34
+
35
+
36
+ - [1. Property `id`](#id)
37
+ - [2. Property `messageId`](#messageId)
38
+ - [3. Property `to`](#to)
39
+ - [4. Property `waba`](#waba)
40
+ - [5. Property `wabaId`](#wabaId)
41
+ - [6. Property `sentAt`](#sentAt)
42
+ - [6.1. Property `_seconds`](#sentAt__seconds)
43
+ - [6.2. Property `_nanoseconds`](#sentAt__nanoseconds)
44
+ - [7. Property `phoneNumberId`](#phoneNumberId)
45
+ - [8. Property `kind`](#kind)
46
+ - [9. Property `templateName`](#templateName)
47
+ - [10. Property `status`](#status)
48
+ - [11. Property `contactWaId`](#contactWaId)
49
+ - [12. Property `appId`](#appId)
50
+ - [13. Property `orderUuid`](#orderUuid)
51
+ - [14. Property `statusUpdatedAt`](#statusUpdatedAt)
52
+ - [14.1. Property `firestore-timestamp`](#statusUpdatedAt_anyOf_i0)
53
+ - [14.2. Property `item 1`](#statusUpdatedAt_anyOf_i1)
54
+ - [15. Property `failureCode`](#failureCode)
55
+ - [16. Property `failureErrors`](#failureErrors)
56
+ - [16.1. failureErrors items](#failureErrors_items)
57
+
58
+ | | |
59
+ | ------------------------- | --------------------------------------- |
60
+ | **Type** | `object` |
61
+ | **Required** | No |
62
+ | **Additional properties** | Not allowed |
63
+ | **Defined in** | #/definitions/whatsapp-outbound-message |
64
+
65
+ **Description:** WhatsappOutboundMessage — outbound WhatsApp message persisted at send time (GH#38). Collection: whatsapp_outbound_messages/\{docId\}. Top-level scope. Symmetric counterpart to WhatsappInboundMessage (GH#36).
66
+
67
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
68
+ | -------------------------------------- | ------- | ---------------- | ---------- | ---------------------------------------- | ----------------------------------------------------------------------------------- |
69
+ | - [id](#id ) | No | string or null | No | - | (Read-only) Firestore document ID — wamid on success, generated UUID on failure. |
70
+ | + [messageId](#messageId ) | No | string | No | - | (Immutable) WhatsApp message ID (wamid) on success; generated UUID on send failure. |
71
+ | + [to](#to ) | No | string | No | - | (Immutable) Recipient phone number in E.164 format. Mirrors inbound \`from\`. |
72
+ | + [waba](#waba ) | No | enum (of string) | No | In #/definitions/waba-label | (Immutable) WABA that sent the message. Mirrors inbound \`waba\`. |
73
+ | + [wabaId](#wabaId ) | No | string | No | - | (Immutable) Meta WABA ID. Mirrors inbound \`wabaId\`. |
74
+ | + [sentAt](#sentAt ) | No | object | No | In #/definitions/firestore-timestamp | (Read-only) Server-side send timestamp. Mirrors inbound \`receivedAt\`. |
75
+ | + [phoneNumberId](#phoneNumberId ) | No | string | No | - | (Immutable) Meta phone number ID used for the send (specific line within the WABA). |
76
+ | + [kind](#kind ) | No | enum (of string) | No | In #/definitions/outbound-message-kind | (Immutable) Message kind. |
77
+ | + [templateName](#templateName ) | No | string | No | - | (Immutable) WhatsApp template name used for the send. |
78
+ | + [status](#status ) | No | enum (of string) | No | In #/definitions/outbound-message-status | Delivery status. Updated in-place by Meta delivery callbacks. |
79
+ | - [contactWaId](#contactWaId ) | No | string or null | No | - | Normalized wa_id returned by Meta on success. May differ from \`to\`. |
80
+ | - [appId](#appId ) | No | string or null | No | - | Tenant appId when applicable. |
81
+ | - [orderUuid](#orderUuid ) | No | string or null | No | - | Order reference. Present on review_request messages only. |
82
+ | - [statusUpdatedAt](#statusUpdatedAt ) | No | Combination | No | - | Timestamp of the last status update from a Meta delivery callback. |
83
+ | - [failureCode](#failureCode ) | No | integer or null | No | - | Meta error code. Present on failed sends only. |
84
+ | - [failureErrors](#failureErrors ) | No | array or null | No | - | Raw Meta error objects. Present on failed sends only. |
85
+
86
+ ## <a name="id"></a>1. Property `id`
87
+
88
+ | | |
89
+ | ------------ | ---------------- |
90
+ | **Type** | `string or null` |
91
+ | **Required** | No |
92
+
93
+ **Description:** (Read-only) Firestore document ID — wamid on success, generated UUID on failure.
94
+
95
+ :::warning Server-set
96
+ 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.
97
+ :::
98
+
99
+ ## <a name="messageId"></a>2. Property `messageId`
100
+
101
+ | | |
102
+ | ------------ | -------- |
103
+ | **Type** | `string` |
104
+ | **Required** | Yes |
105
+
106
+ **Description:** (Immutable) WhatsApp message ID (wamid) on success; generated UUID on send failure.
107
+
108
+ :::info Immutable
109
+ Set at creation only. This field cannot be modified after the document is created. Include it in CREATE payloads; omit it (or leave unchanged) in UPDATE payloads.
110
+ :::
111
+
112
+ ## <a name="to"></a>3. Property `to`
113
+
114
+ | | |
115
+ | ------------ | -------- |
116
+ | **Type** | `string` |
117
+ | **Required** | Yes |
118
+
119
+ **Description:** (Immutable) Recipient phone number in E.164 format. Mirrors inbound `from`.
120
+
121
+ :::info Immutable
122
+ Set at creation only. This field cannot be modified after the document is created. Include it in CREATE payloads; omit it (or leave unchanged) in UPDATE payloads.
123
+ :::
124
+
125
+ ## <a name="waba"></a>4. Property `waba`
126
+
127
+ | | |
128
+ | -------------- | ------------------------ |
129
+ | **Type** | `enum (of string)` |
130
+ | **Required** | Yes |
131
+ | **Defined in** | #/definitions/waba-label |
132
+
133
+ **Description:** (Immutable) WABA that sent the message. Mirrors inbound `waba`.
134
+
135
+ Must be one of:
136
+ * "cmz"
137
+ * "val"
138
+
139
+ :::info Immutable
140
+ Set at creation only. This field cannot be modified after the document is created. Include it in CREATE payloads; omit it (or leave unchanged) in UPDATE payloads.
141
+ :::
142
+
143
+ ## <a name="wabaId"></a>5. Property `wabaId`
144
+
145
+ | | |
146
+ | ------------ | -------- |
147
+ | **Type** | `string` |
148
+ | **Required** | Yes |
149
+
150
+ **Description:** (Immutable) Meta WABA ID. Mirrors inbound `wabaId`.
151
+
152
+ :::info Immutable
153
+ Set at creation only. This field cannot be modified after the document is created. Include it in CREATE payloads; omit it (or leave unchanged) in UPDATE payloads.
154
+ :::
155
+
156
+ ## <a name="sentAt"></a>6. Property `sentAt`
157
+
158
+ | | |
159
+ | ------------------------- | --------------------------------- |
160
+ | **Type** | `object` |
161
+ | **Required** | Yes |
162
+ | **Additional properties** | Not allowed |
163
+ | **Defined in** | #/definitions/firestore-timestamp |
164
+
165
+ **Description:** (Read-only) Server-side send timestamp. Mirrors inbound `receivedAt`.
166
+
167
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
168
+ | --------------------------------------- | ------- | ------- | ---------- | ---------- | ----------------- |
169
+ | + [_seconds](#sentAt__seconds ) | No | integer | No | - | - |
170
+ | + [_nanoseconds](#sentAt__nanoseconds ) | No | integer | No | - | - |
171
+
172
+ ### <a name="sentAt__seconds"></a>6.1. Property `_seconds`
173
+
174
+ | | |
175
+ | ------------ | --------- |
176
+ | **Type** | `integer` |
177
+ | **Required** | Yes |
178
+
179
+ | Restrictions | |
180
+ | ------------ | ---------------------- |
181
+ | **Minimum** | &ge; -9007199254740991 |
182
+ | **Maximum** | &le; 9007199254740991 |
183
+
184
+ ### <a name="sentAt__nanoseconds"></a>6.2. Property `_nanoseconds`
185
+
186
+ | | |
187
+ | ------------ | --------- |
188
+ | **Type** | `integer` |
189
+ | **Required** | Yes |
190
+
191
+ | Restrictions | |
192
+ | ------------ | ---------------------- |
193
+ | **Minimum** | &ge; -9007199254740991 |
194
+ | **Maximum** | &le; 9007199254740991 |
195
+
196
+ :::warning Server-set
197
+ 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.
198
+ :::
199
+
200
+ ## <a name="phoneNumberId"></a>7. Property `phoneNumberId`
201
+
202
+ | | |
203
+ | ------------ | -------- |
204
+ | **Type** | `string` |
205
+ | **Required** | Yes |
206
+
207
+ **Description:** (Immutable) Meta phone number ID used for the send (specific line within the WABA).
208
+
209
+ :::info Immutable
210
+ Set at creation only. This field cannot be modified after the document is created. Include it in CREATE payloads; omit it (or leave unchanged) in UPDATE payloads.
211
+ :::
212
+
213
+ ## <a name="kind"></a>8. Property `kind`
214
+
215
+ | | |
216
+ | -------------- | ----------------------------------- |
217
+ | **Type** | `enum (of string)` |
218
+ | **Required** | Yes |
219
+ | **Defined in** | #/definitions/outbound-message-kind |
220
+
221
+ **Description:** (Immutable) Message kind.
222
+
223
+ Must be one of:
224
+ * "otp"
225
+ * "review_request"
226
+
227
+ :::info Immutable
228
+ Set at creation only. This field cannot be modified after the document is created. Include it in CREATE payloads; omit it (or leave unchanged) in UPDATE payloads.
229
+ :::
230
+
231
+ ## <a name="templateName"></a>9. Property `templateName`
232
+
233
+ | | |
234
+ | ------------ | -------- |
235
+ | **Type** | `string` |
236
+ | **Required** | Yes |
237
+
238
+ **Description:** (Immutable) WhatsApp template name used for the send.
239
+
240
+ :::info Immutable
241
+ Set at creation only. This field cannot be modified after the document is created. Include it in CREATE payloads; omit it (or leave unchanged) in UPDATE payloads.
242
+ :::
243
+
244
+ ## <a name="status"></a>10. Property `status`
245
+
246
+ | | |
247
+ | -------------- | ------------------------------------- |
248
+ | **Type** | `enum (of string)` |
249
+ | **Required** | Yes |
250
+ | **Defined in** | #/definitions/outbound-message-status |
251
+
252
+ **Description:** Delivery status. Updated in-place by Meta delivery callbacks.
253
+
254
+ Must be one of:
255
+ * "accepted"
256
+ * "sent"
257
+ * "delivered"
258
+ * "read"
259
+ * "failed"
260
+
261
+ ## <a name="contactWaId"></a>11. Property `contactWaId`
262
+
263
+ | | |
264
+ | ------------ | ---------------- |
265
+ | **Type** | `string or null` |
266
+ | **Required** | No |
267
+
268
+ **Description:** Normalized wa_id returned by Meta on success. May differ from `to`.
269
+
270
+ ## <a name="appId"></a>12. Property `appId`
271
+
272
+ | | |
273
+ | ------------ | ---------------- |
274
+ | **Type** | `string or null` |
275
+ | **Required** | No |
276
+
277
+ **Description:** Tenant appId when applicable.
278
+
279
+ ## <a name="orderUuid"></a>13. Property `orderUuid`
280
+
281
+ | | |
282
+ | ------------ | ---------------- |
283
+ | **Type** | `string or null` |
284
+ | **Required** | No |
285
+
286
+ **Description:** Order reference. Present on review_request messages only.
287
+
288
+ ## <a name="statusUpdatedAt"></a>14. Property `statusUpdatedAt`
289
+
290
+ | | |
291
+ | ------------------------- | ---------------- |
292
+ | **Type** | `combining` |
293
+ | **Required** | No |
294
+ | **Additional properties** | Any type allowed |
295
+
296
+ **Description:** Timestamp of the last status update from a Meta delivery callback.
297
+
298
+ | Any of(Option) |
299
+ | ------------------------------------------------ |
300
+ | [firestore-timestamp](#statusUpdatedAt_anyOf_i0) |
301
+ | [item 1](#statusUpdatedAt_anyOf_i1) |
302
+
303
+ ### <a name="statusUpdatedAt_anyOf_i0"></a>14.1. Property `firestore-timestamp`
304
+
305
+ | | |
306
+ | ------------------------- | ----------------- |
307
+ | **Type** | `object` |
308
+ | **Required** | No |
309
+ | **Additional properties** | Not allowed |
310
+ | **Same definition as** | [sentAt](#sentAt) |
311
+
312
+ **Description:** Firestore Timestamp serialized representation
313
+
314
+ ### <a name="statusUpdatedAt_anyOf_i1"></a>14.2. Property `item 1`
315
+
316
+ | | |
317
+ | ------------ | ------ |
318
+ | **Type** | `null` |
319
+ | **Required** | No |
320
+
321
+ ## <a name="failureCode"></a>15. Property `failureCode`
322
+
323
+ | | |
324
+ | ------------ | ----------------- |
325
+ | **Type** | `integer or null` |
326
+ | **Required** | No |
327
+
328
+ **Description:** Meta error code. Present on failed sends only.
329
+
330
+ | Restrictions | |
331
+ | ------------ | ---------------------- |
332
+ | **Minimum** | &ge; -9007199254740991 |
333
+ | **Maximum** | &le; 9007199254740991 |
334
+
335
+ ## <a name="failureErrors"></a>16. Property `failureErrors`
336
+
337
+ | | |
338
+ | ------------ | --------------- |
339
+ | **Type** | `array or null` |
340
+ | **Required** | No |
341
+
342
+ **Description:** Raw Meta error objects. Present on failed sends only.
343
+
344
+ | | Array restrictions |
345
+ | -------------------- | ------------------ |
346
+ | **Min items** | N/A |
347
+ | **Max items** | N/A |
348
+ | **Items unicity** | False |
349
+ | **Additional items** | False |
350
+ | **Tuple validation** | See below |
351
+
352
+ | Each item of this array must be | Description |
353
+ | ------------------------------------------- | ----------- |
354
+ | [failureErrors items](#failureErrors_items) | - |
355
+
356
+ ### <a name="failureErrors_items"></a>16.1. failureErrors items
357
+
358
+ | | |
359
+ | ------------------------- | ---------------- |
360
+ | **Type** | `object` |
361
+ | **Required** | No |
362
+ | **Additional properties** | Any type allowed |
363
+
364
+ ----------------------------------------------------------------------------------------------------------------------------
365
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-16 at 00:18:16 +0000
@@ -4,7 +4,7 @@
4
4
  > Source of truth: Zod schemas in packages/schema/src/
5
5
  > All Firestore documents are scoped under companies/{companyId}/
6
6
 
7
- > Generated: 2026-05-15
7
+ > Generated: 2026-05-16
8
8
 
9
9
  ---
10
10
 
@@ -50,6 +50,14 @@ Values: EARNED, REDEEMED, ADJUSTED, EXPIRED, BONUS, REFUND
50
50
  Core order lifecycle status (D03, D34). Universal across all business types. Replaces the Dashboard's legacy 20-value flat enum (MIG-11).
51
51
  Values: PENDING, CONFIRMED, PROCESSING, READY, COMPLETED, CANCELLED, EXPIRED
52
52
 
53
+ ### OutboundMessageKind
54
+ Outbound WhatsApp message kind. Strict enum — new kinds require a schema version bump (GH#38).
55
+ Values: otp, review_request
56
+
57
+ ### OutboundMessageStatus
58
+ Outbound WhatsApp message delivery status. Lifecycle: accepted → sent → delivered → read, or accepted → failed. Updated in-place by Meta delivery callbacks (GH#38).
59
+ Values: accepted, sent, delivered, read, failed
60
+
53
61
  ### PaymentMethod
54
62
  Unified payment method set with African + global methods (D02).
55
63
  Values: CASH, CREDIT_CARD, ORANGE_MONEY, WAVE, MTN_MONEY, MOOV_MONEY, BANK_TRANSFER, PAYPAL, STRIPE, OTHER
@@ -1484,11 +1492,11 @@ Fields: 13 (7 required)
1484
1492
  | from | string | yes | (Immutable) Sender phone number in E.164 format. |
1485
1493
  | type | any | yes | (Immutable) Meta message type. |
1486
1494
  | timestamp | FirestoreTimestamp | yes | (Immutable) Message timestamp as reported by Meta. |
1487
- | receivedAt | FirestoreTimestamp | yes | (Read-only) Server-side ingestion time set by the Cloud Function. |
1495
+ | receivedAt | FirestoreTimestamp | yes | (Read-only) Server-side ingestion timestamp. |
1488
1496
  | text | ['string', 'null'] | no | Message body text. Present on type=text messages only. |
1489
1497
  | mediaId | ['string', 'null'] | no | Meta media ID. Present on image, audio, video, document, sticker messages. |
1490
1498
  | caption | ['string', 'null'] | no | Media caption text. Present when the sender included a caption. |
1491
- | storageUrl | ['string', 'null'] | no | Durable Cloud Storage URL for the downloaded media binary. Present after the CF downloads and stores the media. |
1499
+ | storageUrl | ['string', 'null'] | no | Durable Cloud Storage URL for the downloaded media binary. Present after the media has been fetched and stored server-side. |
1492
1500
  | context | ['object', 'null'] | no | Reply/forward context. Present on replies and forwarded messages. |
1493
1501
 
1494
1502
  Example:
@@ -1510,6 +1518,50 @@ Example:
1510
1518
  }
1511
1519
  ```
1512
1520
 
1521
+ ### WhatsappOutboundMessage
1522
+ Fields: 16 (9 required)
1523
+
1524
+ | Field | Type | Required | Description |
1525
+ |-------|------|----------|-------------|
1526
+ | id | ['string', 'null'] | no | (Read-only) Firestore document ID — wamid on success, generated UUID on failure. |
1527
+ | messageId | string | yes | (Immutable) WhatsApp message ID (wamid) on success; generated UUID on send failure. |
1528
+ | to | string | yes | (Immutable) Recipient phone number in E.164 format. Mirrors inbound `from`. |
1529
+ | waba | WabaLabel | yes | (Immutable) WABA that sent the message. Mirrors inbound `waba`. |
1530
+ | wabaId | string | yes | (Immutable) Meta WABA ID. Mirrors inbound `wabaId`. |
1531
+ | sentAt | FirestoreTimestamp | yes | (Read-only) Server-side send timestamp. Mirrors inbound `receivedAt`. |
1532
+ | phoneNumberId | string | yes | (Immutable) Meta phone number ID used for the send (specific line within the WABA). |
1533
+ | kind | OutboundMessageKind | yes | (Immutable) Message kind. |
1534
+ | templateName | string | yes | (Immutable) WhatsApp template name used for the send. |
1535
+ | status | OutboundMessageStatus | yes | Delivery status. Updated in-place by Meta delivery callbacks. |
1536
+ | contactWaId | ['string', 'null'] | no | Normalized wa_id returned by Meta on success. May differ from `to`. |
1537
+ | appId | ['string', 'null'] | no | Tenant appId when applicable. |
1538
+ | orderUuid | ['string', 'null'] | no | Order reference. Present on review_request messages only. |
1539
+ | statusUpdatedAt | any | no | Timestamp of the last status update from a Meta delivery callback. |
1540
+ | failureCode | ['integer', 'null'] | no | Meta error code. Present on failed sends only. |
1541
+ | failureErrors | ['array', 'null'] | no | Raw Meta error objects. Present on failed sends only. |
1542
+
1543
+ Example:
1544
+ ```json
1545
+ {
1546
+ "id": null,
1547
+ "messageId": "mes_ref123",
1548
+ "to": "to",
1549
+ "waba": "waba",
1550
+ "wabaId": "wab_ref123",
1551
+ "sentAt": "sentAt",
1552
+ "phoneNumberId": "pho_ref123",
1553
+ "kind": "kind",
1554
+ "templateName": "templateName",
1555
+ "status": "status",
1556
+ "contactWaId": null,
1557
+ "appId": null,
1558
+ "orderUuid": null,
1559
+ "statusUpdatedAt": "statusUpdatedAt",
1560
+ "failureCode": null,
1561
+ "failureErrors": null
1562
+ }
1563
+ ```
1564
+
1513
1565
  ---
1514
1566
 
1515
1567
  ## Proposed (Work In Progress)