@marcohefti/request-network-api-contracts 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,850 @@
1
+ {
2
+ "openapi": "3.1.0",
3
+ "info": {
4
+ "title": "Request Network Webhooks",
5
+ "version": "0.1.0",
6
+ "description": "Webhook events sent by the Request Network API to subscribed endpoints. Each request is signed with an HMAC-SHA256 hex digest in the `x-request-network-signature` header (computed over the raw JSON body using your webhook secret). This community-maintained spec currently models the documented events (`payment.confirmed`, `payment.failed`, `payment.processing`, `payment_detail.updated`, `compliance.updated`). Additional payment lifecycle events such as \"Payment Partial\" or \"Payment Refunded\" are not yet included because the official docs do not publish canonical identifiers or payload schemas for them."
7
+ },
8
+ "webhooks": {
9
+ "payment.confirmed": {
10
+ "post": {
11
+ "summary": "Payment fully settled",
12
+ "description": "Sent when a payment is fully settled. In crypto-to-fiat flows, this follows a final `payment.processing` with `subStatus: fiat_sent`.",
13
+ "parameters": [
14
+ {
15
+ "$ref": "#/components/parameters/XRequestNetworkSignature"
16
+ }
17
+ ],
18
+ "requestBody": {
19
+ "required": true,
20
+ "content": {
21
+ "application/json": {
22
+ "schema": {
23
+ "$ref": "#/components/schemas/PaymentConfirmedEvent"
24
+ },
25
+ "examples": {
26
+ "paymentConfirmed": {
27
+ "$ref": "#/components/examples/payment_confirmed"
28
+ }
29
+ }
30
+ }
31
+ }
32
+ },
33
+ "responses": {
34
+ "200": {
35
+ "description": "Acknowledged"
36
+ },
37
+ "401": {
38
+ "description": "Signature verification failed"
39
+ }
40
+ },
41
+ "security": [
42
+ {
43
+ "RequestSignatureHMAC": []
44
+ }
45
+ ]
46
+ }
47
+ },
48
+ "payment.failed": {
49
+ "post": {
50
+ "summary": "Payment or offramp failed",
51
+ "description": "Sent when a payment or crypto-to-fiat offramp fails.",
52
+ "parameters": [
53
+ {
54
+ "$ref": "#/components/parameters/XRequestNetworkSignature"
55
+ }
56
+ ],
57
+ "requestBody": {
58
+ "required": true,
59
+ "content": {
60
+ "application/json": {
61
+ "schema": {
62
+ "$ref": "#/components/schemas/PaymentFailedEvent"
63
+ },
64
+ "examples": {
65
+ "paymentFailed": {
66
+ "$ref": "#/components/examples/payment_failed"
67
+ }
68
+ }
69
+ }
70
+ }
71
+ },
72
+ "responses": {
73
+ "200": {
74
+ "description": "Acknowledged"
75
+ },
76
+ "401": {
77
+ "description": "Signature verification failed"
78
+ }
79
+ },
80
+ "security": [
81
+ {
82
+ "RequestSignatureHMAC": []
83
+ }
84
+ ]
85
+ }
86
+ },
87
+ "payment.processing": {
88
+ "post": {
89
+ "summary": "Offramp in progress",
90
+ "description": "Sent as the crypto-to-fiat offramp progresses. The `subStatus` field indicates the current stage.",
91
+ "parameters": [
92
+ {
93
+ "$ref": "#/components/parameters/XRequestNetworkSignature"
94
+ }
95
+ ],
96
+ "requestBody": {
97
+ "required": true,
98
+ "content": {
99
+ "application/json": {
100
+ "schema": {
101
+ "$ref": "#/components/schemas/PaymentProcessingEvent"
102
+ },
103
+ "examples": {
104
+ "paymentProcessing": {
105
+ "$ref": "#/components/examples/payment_processing"
106
+ }
107
+ }
108
+ }
109
+ }
110
+ },
111
+ "responses": {
112
+ "200": {
113
+ "description": "Acknowledged"
114
+ },
115
+ "401": {
116
+ "description": "Signature verification failed"
117
+ }
118
+ },
119
+ "security": [
120
+ {
121
+ "RequestSignatureHMAC": []
122
+ }
123
+ ]
124
+ }
125
+ },
126
+ "payment_detail.updated": {
127
+ "post": {
128
+ "summary": "Payment detail (bank account) status update",
129
+ "description": "Sent when payee payment details used for crypto-to-fiat are updated (approved/failed/pending).",
130
+ "parameters": [
131
+ {
132
+ "$ref": "#/components/parameters/XRequestNetworkSignature"
133
+ }
134
+ ],
135
+ "requestBody": {
136
+ "required": true,
137
+ "content": {
138
+ "application/json": {
139
+ "schema": {
140
+ "$ref": "#/components/schemas/PaymentDetailUpdatedEvent"
141
+ },
142
+ "examples": {
143
+ "paymentDetailUpdated": {
144
+ "$ref": "#/components/examples/payment_detail_updated"
145
+ }
146
+ }
147
+ }
148
+ }
149
+ },
150
+ "responses": {
151
+ "200": {
152
+ "description": "Acknowledged"
153
+ },
154
+ "401": {
155
+ "description": "Signature verification failed"
156
+ }
157
+ },
158
+ "security": [
159
+ {
160
+ "RequestSignatureHMAC": []
161
+ }
162
+ ]
163
+ }
164
+ },
165
+ "compliance.updated": {
166
+ "post": {
167
+ "summary": "KYC/Agreement status update",
168
+ "description": "Sent when payer compliance statuses change (KYC or agreement).",
169
+ "parameters": [
170
+ {
171
+ "$ref": "#/components/parameters/XRequestNetworkSignature"
172
+ }
173
+ ],
174
+ "requestBody": {
175
+ "required": true,
176
+ "content": {
177
+ "application/json": {
178
+ "schema": {
179
+ "$ref": "#/components/schemas/ComplianceUpdatedEvent"
180
+ },
181
+ "examples": {
182
+ "complianceUpdated": {
183
+ "$ref": "#/components/examples/compliance_updated"
184
+ }
185
+ }
186
+ }
187
+ }
188
+ },
189
+ "responses": {
190
+ "200": {
191
+ "description": "Acknowledged"
192
+ },
193
+ "401": {
194
+ "description": "Signature verification failed"
195
+ }
196
+ },
197
+ "security": [
198
+ {
199
+ "RequestSignatureHMAC": []
200
+ }
201
+ ]
202
+ }
203
+ },
204
+ "payment.partial": {
205
+ "post": {
206
+ "summary": "Partial payment applied",
207
+ "description": "Sent when a request receives a partial payment.",
208
+ "parameters": [
209
+ {
210
+ "$ref": "#/components/parameters/XRequestNetworkSignature"
211
+ }
212
+ ],
213
+ "requestBody": {
214
+ "required": true,
215
+ "content": {
216
+ "application/json": {
217
+ "schema": {
218
+ "$ref": "#/components/schemas/PaymentPartialEvent"
219
+ },
220
+ "examples": {
221
+ "payment_partial": {
222
+ "$ref": "#/components/examples/payment_partial"
223
+ }
224
+ }
225
+ }
226
+ }
227
+ },
228
+ "responses": {
229
+ "200": {
230
+ "description": "Acknowledged"
231
+ },
232
+ "401": {
233
+ "description": "Signature verification failed"
234
+ }
235
+ },
236
+ "security": [
237
+ {
238
+ "RequestSignatureHMAC": []
239
+ }
240
+ ]
241
+ }
242
+ },
243
+ "payment.refunded": {
244
+ "post": {
245
+ "summary": "Payment refunded",
246
+ "description": "Sent when Request issues a refund for a payment.",
247
+ "parameters": [
248
+ {
249
+ "$ref": "#/components/parameters/XRequestNetworkSignature"
250
+ }
251
+ ],
252
+ "requestBody": {
253
+ "required": true,
254
+ "content": {
255
+ "application/json": {
256
+ "schema": {
257
+ "$ref": "#/components/schemas/PaymentRefundedEvent"
258
+ },
259
+ "examples": {
260
+ "payment_refunded": {
261
+ "$ref": "#/components/examples/payment_refunded"
262
+ }
263
+ }
264
+ }
265
+ }
266
+ },
267
+ "responses": {
268
+ "200": {
269
+ "description": "Acknowledged"
270
+ },
271
+ "401": {
272
+ "description": "Signature verification failed"
273
+ }
274
+ },
275
+ "security": [
276
+ {
277
+ "RequestSignatureHMAC": []
278
+ }
279
+ ]
280
+ }
281
+ },
282
+ "request.recurring": {
283
+ "post": {
284
+ "summary": "Recurring request created",
285
+ "description": "Sent when a new recurring request is generated from an existing request.",
286
+ "parameters": [
287
+ {
288
+ "$ref": "#/components/parameters/XRequestNetworkSignature"
289
+ }
290
+ ],
291
+ "requestBody": {
292
+ "required": true,
293
+ "content": {
294
+ "application/json": {
295
+ "schema": {
296
+ "$ref": "#/components/schemas/RequestRecurringEvent"
297
+ },
298
+ "examples": {
299
+ "request_recurring": {
300
+ "$ref": "#/components/examples/request_recurring"
301
+ }
302
+ }
303
+ }
304
+ }
305
+ },
306
+ "responses": {
307
+ "200": {
308
+ "description": "Acknowledged"
309
+ },
310
+ "401": {
311
+ "description": "Signature verification failed"
312
+ }
313
+ },
314
+ "security": [
315
+ {
316
+ "RequestSignatureHMAC": []
317
+ }
318
+ ]
319
+ }
320
+ }
321
+ },
322
+ "components": {
323
+ "securitySchemes": {
324
+ "RequestSignatureHMAC": {
325
+ "type": "apiKey",
326
+ "in": "header",
327
+ "name": "x-request-network-signature",
328
+ "description": "HMAC-SHA256 hex digest of the raw request body, generated with your webhook secret. Verify by recomputing the digest over the exact raw body and comparing in constant time."
329
+ }
330
+ },
331
+ "parameters": {
332
+ "XRequestNetworkSignature": {
333
+ "name": "x-request-network-signature",
334
+ "in": "header",
335
+ "required": true,
336
+ "description": "HMAC-SHA256 signature of the raw JSON request body using your webhook secret. Hex-encoded.",
337
+ "schema": {
338
+ "type": "string"
339
+ }
340
+ }
341
+ },
342
+ "schemas": {
343
+ "WebhookFeeItem": {
344
+ "type": "object",
345
+ "additionalProperties": false,
346
+ "properties": {
347
+ "type": {
348
+ "type": "string",
349
+ "description": "Fee type as provided in the webhook (example: \"network\")."
350
+ },
351
+ "amount": {
352
+ "type": "string",
353
+ "description": "Human-readable amount as a string."
354
+ },
355
+ "currency": {
356
+ "type": "string",
357
+ "description": "Currency code/symbol as provided (e.g., \"ETH\")."
358
+ }
359
+ },
360
+ "required": [
361
+ "type",
362
+ "amount",
363
+ "currency"
364
+ ]
365
+ },
366
+ "WebhookBase": {
367
+ "type": "object",
368
+ "additionalProperties": true,
369
+ "description": "Common fields observed in webhook payloads. Presence may vary by event.",
370
+ "properties": {
371
+ "event": {
372
+ "type": "string",
373
+ "description": "Event identifier string."
374
+ },
375
+ "requestId": {
376
+ "type": "string",
377
+ "description": "Request identifier when applicable."
378
+ },
379
+ "requestID": {
380
+ "type": "string",
381
+ "description": "Alias of requestId that may appear in some payloads."
382
+ },
383
+ "paymentReference": {
384
+ "type": "string",
385
+ "description": "Opaque reference used to link blockchain transactions."
386
+ },
387
+ "explorer": {
388
+ "type": "string",
389
+ "format": "uri",
390
+ "description": "Explorer URL for the request."
391
+ },
392
+ "amount": {
393
+ "type": "string",
394
+ "description": "Paid amount (human-readable string)."
395
+ },
396
+ "totalAmountPaid": {
397
+ "type": "string",
398
+ "description": "Total amount paid to date (human-readable string)."
399
+ },
400
+ "expectedAmount": {
401
+ "type": "string",
402
+ "description": "Expected amount for the request (human-readable string)."
403
+ },
404
+ "timestamp": {
405
+ "type": "string",
406
+ "format": "date-time",
407
+ "description": "RFC 3339 timestamp of the event."
408
+ },
409
+ "txHash": {
410
+ "type": "string",
411
+ "description": "Blockchain transaction hash (if applicable)."
412
+ },
413
+ "network": {
414
+ "type": "string",
415
+ "description": "Blockchain/network name (e.g., \"ethereum\")."
416
+ },
417
+ "currency": {
418
+ "type": "string",
419
+ "description": "Invoice/request currency code."
420
+ },
421
+ "paymentCurrency": {
422
+ "type": "string",
423
+ "description": "Currency actually used for payment."
424
+ },
425
+ "isCryptoToFiat": {
426
+ "type": "boolean",
427
+ "description": "True if the payment used the crypto-to-fiat flow."
428
+ },
429
+ "subStatus": {
430
+ "type": "string",
431
+ "description": "Additional state qualifier for some events."
432
+ },
433
+ "paymentProcessor": {
434
+ "type": "string",
435
+ "description": "Payment processor identifier (example: \"request-network\")."
436
+ },
437
+ "fees": {
438
+ "type": "array",
439
+ "items": {
440
+ "$ref": "#/components/schemas/WebhookFeeItem"
441
+ }
442
+ },
443
+ "rawPayload": {
444
+ "type": "object",
445
+ "description": "Raw provider payload forwarded by Request (structure varies per provider).",
446
+ "additionalProperties": true
447
+ },
448
+ "clientUserId": {
449
+ "type": "string",
450
+ "description": "Client user identifier associated with the webhook when available."
451
+ }
452
+ },
453
+ "required": [
454
+ "event"
455
+ ]
456
+ },
457
+ "PaymentConfirmedEvent": {
458
+ "allOf": [
459
+ {
460
+ "$ref": "#/components/schemas/WebhookBase"
461
+ },
462
+ {
463
+ "type": "object",
464
+ "additionalProperties": true,
465
+ "properties": {
466
+ "event": {
467
+ "const": "payment.confirmed"
468
+ }
469
+ },
470
+ "required": [
471
+ "event"
472
+ ]
473
+ }
474
+ ],
475
+ "description": "Payment fully settled (fiat delivered for crypto-to-fiat)."
476
+ },
477
+ "PaymentFailedEvent": {
478
+ "allOf": [
479
+ {
480
+ "$ref": "#/components/schemas/WebhookBase"
481
+ },
482
+ {
483
+ "type": "object",
484
+ "additionalProperties": true,
485
+ "properties": {
486
+ "event": {
487
+ "const": "payment.failed"
488
+ },
489
+ "subStatus": {
490
+ "type": "string",
491
+ "enum": [
492
+ "failed",
493
+ "bounced",
494
+ "insufficient_funds"
495
+ ],
496
+ "description": "Additional failure detail when provided."
497
+ },
498
+ "failureReason": {
499
+ "type": "string",
500
+ "description": "Human-readable reason explaining why the payment failed when provided."
501
+ },
502
+ "retryAfter": {
503
+ "type": "string",
504
+ "description": "Suggested retry window (ISO timestamp or duration hint) when the failure is recoverable."
505
+ }
506
+ },
507
+ "required": [
508
+ "event"
509
+ ]
510
+ }
511
+ ],
512
+ "description": "Payment or offramp failed."
513
+ },
514
+ "PaymentProcessingEvent": {
515
+ "allOf": [
516
+ {
517
+ "$ref": "#/components/schemas/WebhookBase"
518
+ },
519
+ {
520
+ "type": "object",
521
+ "additionalProperties": true,
522
+ "properties": {
523
+ "event": {
524
+ "const": "payment.processing"
525
+ },
526
+ "subStatus": {
527
+ "type": "string",
528
+ "enum": [
529
+ "initiated",
530
+ "pending_internal_assessment",
531
+ "ongoing_checks",
532
+ "sending_fiat",
533
+ "fiat_sent",
534
+ "bounced",
535
+ "retry_required",
536
+ "processing"
537
+ ],
538
+ "description": "Offramp processing stage."
539
+ },
540
+ "rawPayload": {
541
+ "type": "object",
542
+ "additionalProperties": true,
543
+ "description": "Provider-specific payload describing the processing state."
544
+ }
545
+ },
546
+ "required": [
547
+ "event"
548
+ ]
549
+ }
550
+ ],
551
+ "description": "Offramp in progress; see subStatus for stage."
552
+ },
553
+ "PaymentDetailUpdatedEvent": {
554
+ "type": "object",
555
+ "additionalProperties": true,
556
+ "allOf": [
557
+ {
558
+ "$ref": "#/components/schemas/WebhookBase"
559
+ },
560
+ {
561
+ "type": "object",
562
+ "properties": {
563
+ "event": {
564
+ "const": "payment_detail.updated"
565
+ },
566
+ "status": {
567
+ "type": "string",
568
+ "enum": [
569
+ "approved",
570
+ "failed",
571
+ "pending",
572
+ "verified"
573
+ ],
574
+ "description": "Status of the payment details (bank account) used for off-ramp."
575
+ },
576
+ "paymentAccountId": {
577
+ "type": "string",
578
+ "description": "Identifier of the payment account whose status changed."
579
+ },
580
+ "rejectionMessage": {
581
+ "type": "string",
582
+ "description": "Optional rejection message supplied when status is failed."
583
+ },
584
+ "paymentDetailsId": {
585
+ "type": "string",
586
+ "description": "Identifier of the payment details record whose status changed."
587
+ },
588
+ "rawPayload": {
589
+ "type": "object",
590
+ "additionalProperties": true,
591
+ "description": "Provider-specific payload attached to the event."
592
+ }
593
+ },
594
+ "required": [
595
+ "event",
596
+ "status"
597
+ ]
598
+ }
599
+ ],
600
+ "description": "Payment detail (bank account) approval state change."
601
+ },
602
+ "ComplianceUpdatedEvent": {
603
+ "type": "object",
604
+ "additionalProperties": true,
605
+ "allOf": [
606
+ {
607
+ "$ref": "#/components/schemas/WebhookBase"
608
+ },
609
+ {
610
+ "type": "object",
611
+ "properties": {
612
+ "event": {
613
+ "const": "compliance.updated"
614
+ },
615
+ "kycStatus": {
616
+ "type": "string",
617
+ "enum": [
618
+ "initiated",
619
+ "pending",
620
+ "approved",
621
+ "rejected",
622
+ "failed"
623
+ ],
624
+ "description": "KYC review status (when applicable)."
625
+ },
626
+ "agreementStatus": {
627
+ "type": "string",
628
+ "enum": [
629
+ "not_started",
630
+ "pending",
631
+ "completed",
632
+ "rejected",
633
+ "failed",
634
+ "signed"
635
+ ],
636
+ "description": "Compliance agreement status (when applicable)."
637
+ },
638
+ "clientUserId": {
639
+ "type": "string",
640
+ "description": "Platform-defined payer identifier referenced by `/payer` endpoints."
641
+ },
642
+ "isCompliant": {
643
+ "type": "boolean",
644
+ "description": "True when the user currently satisfies compliance requirements."
645
+ },
646
+ "rawPayload": {
647
+ "type": "object",
648
+ "additionalProperties": true,
649
+ "description": "Provider-specific compliance payload when forwarded by Request."
650
+ }
651
+ },
652
+ "required": [
653
+ "event"
654
+ ]
655
+ }
656
+ ],
657
+ "description": "Compliance (KYC/Agreement) update for a payer."
658
+ },
659
+ "PaymentPartialEvent": {
660
+ "allOf": [
661
+ {
662
+ "$ref": "#/components/schemas/WebhookBase"
663
+ },
664
+ {
665
+ "type": "object",
666
+ "additionalProperties": true,
667
+ "properties": {
668
+ "event": {
669
+ "const": "payment.partial"
670
+ }
671
+ },
672
+ "required": [
673
+ "event"
674
+ ]
675
+ }
676
+ ],
677
+ "description": "Partial payment recorded for the request."
678
+ },
679
+ "PaymentRefundedEvent": {
680
+ "allOf": [
681
+ {
682
+ "$ref": "#/components/schemas/WebhookBase"
683
+ },
684
+ {
685
+ "type": "object",
686
+ "additionalProperties": true,
687
+ "properties": {
688
+ "event": {
689
+ "const": "payment.refunded"
690
+ },
691
+ "refundedTo": {
692
+ "type": "string",
693
+ "description": "Destination account or address that received the refund."
694
+ },
695
+ "refundAmount": {
696
+ "type": "string",
697
+ "description": "Amount refunded (human-readable string)."
698
+ }
699
+ },
700
+ "required": [
701
+ "event"
702
+ ]
703
+ }
704
+ ],
705
+ "description": "Refund issued back to a sender or alternate destination."
706
+ },
707
+ "RequestRecurringEvent": {
708
+ "allOf": [
709
+ {
710
+ "$ref": "#/components/schemas/WebhookBase"
711
+ },
712
+ {
713
+ "type": "object",
714
+ "additionalProperties": true,
715
+ "properties": {
716
+ "event": {
717
+ "const": "request.recurring"
718
+ },
719
+ "originalRequestId": {
720
+ "type": "string",
721
+ "description": "Identifier of the original request that triggered the recurring event."
722
+ },
723
+ "originalRequestPaymentReference": {
724
+ "type": "string",
725
+ "description": "Payment reference from the original request."
726
+ }
727
+ },
728
+ "required": [
729
+ "event"
730
+ ]
731
+ }
732
+ ],
733
+ "description": "Recurring request generated from an existing request."
734
+ }
735
+ },
736
+ "examples": {
737
+ "payment_confirmed": {
738
+ "summary": "Example from docs",
739
+ "value": {
740
+ "event": "payment.confirmed",
741
+ "requestId": "req_test123456789abcdef",
742
+ "requestID": "req_test123456789abcdef",
743
+ "paymentReference": "0x1234567890abcdef1234567890abcdef12345678",
744
+ "explorer": "https://scan.request.network/request/req_test123456789abcdef",
745
+ "amount": "100.0",
746
+ "totalAmountPaid": "100.0",
747
+ "expectedAmount": "100.0",
748
+ "timestamp": "2025-08-28T12:25:45.995Z",
749
+ "txHash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
750
+ "network": "ethereum",
751
+ "currency": "USDC",
752
+ "paymentCurrency": "USDC",
753
+ "isCryptoToFiat": false,
754
+ "paymentProcessor": "request-network",
755
+ "fees": [
756
+ {
757
+ "type": "network",
758
+ "amount": "0.02",
759
+ "currency": "ETH"
760
+ }
761
+ ]
762
+ }
763
+ },
764
+ "payment_failed": {
765
+ "summary": "Minimal failure example (fields vary by flow)",
766
+ "value": {
767
+ "event": "payment.failed",
768
+ "requestId": "01e273ecc29d4b526df3a0f1f05ffc59372af8752c2b678096e49ac270416a7cdb",
769
+ "subStatus": "failed",
770
+ "timestamp": "2025-10-10T12:34:56Z"
771
+ }
772
+ },
773
+ "payment_processing": {
774
+ "summary": "Offramp stage example",
775
+ "value": {
776
+ "event": "payment.processing",
777
+ "requestId": "01e273ecc29d4b526df3a0f1f05ffc59372af8752c2b678096e49ac270416a7cdb",
778
+ "subStatus": "processing",
779
+ "timestamp": "2025-10-10T12:35:10Z",
780
+ "isCryptoToFiat": true,
781
+ "rawPayload": {
782
+ "status": "processing"
783
+ }
784
+ }
785
+ },
786
+ "payment_detail_updated": {
787
+ "summary": "Payment details approved",
788
+ "value": {
789
+ "event": "payment_detail.updated",
790
+ "status": "verified",
791
+ "timestamp": "2025-10-10T12:00:00Z",
792
+ "clientUserId": "user-123",
793
+ "paymentDetailsId": "pd_example",
794
+ "rawPayload": {
795
+ "bankAccount": "verified"
796
+ }
797
+ }
798
+ },
799
+ "compliance_updated": {
800
+ "summary": "KYC and agreement status update",
801
+ "value": {
802
+ "event": "compliance.updated",
803
+ "clientUserId": "user-123",
804
+ "kycStatus": "approved",
805
+ "agreementStatus": "signed",
806
+ "timestamp": "2025-10-10T12:00:00Z",
807
+ "isCompliant": true
808
+ }
809
+ },
810
+ "payment_partial": {
811
+ "summary": "Partial payment received",
812
+ "value": {
813
+ "event": "payment.partial",
814
+ "requestId": "req_test123456789abcdef",
815
+ "paymentReference": "0x1234567890abcdef1234567890abcdef12345678",
816
+ "amount": "50.0",
817
+ "totalAmountPaid": "50.0",
818
+ "expectedAmount": "100.0",
819
+ "timestamp": "2025-11-04T05:19:59.380Z",
820
+ "paymentProcessor": "request-network",
821
+ "fees": []
822
+ }
823
+ },
824
+ "payment_refunded": {
825
+ "summary": "Payment refunded",
826
+ "value": {
827
+ "event": "payment.refunded",
828
+ "requestId": "req_test123456789abcdef",
829
+ "paymentReference": "0x1234567890abcdef1234567890abcdef12345678",
830
+ "refundedTo": "0x742d35Cc6634C0532925a3b8D78Ecf23Ee6d63D4",
831
+ "refundAmount": "100.0",
832
+ "currency": "USDC",
833
+ "paymentProcessor": "request-network"
834
+ }
835
+ },
836
+ "request_recurring": {
837
+ "summary": "Recurring request created",
838
+ "value": {
839
+ "event": "request.recurring",
840
+ "requestId": "req_new123456789abcdef",
841
+ "paymentReference": "0x9876543210fedcba9876543210fedcba98765432",
842
+ "originalRequestId": "req_test123456789abcdef",
843
+ "originalRequestPaymentReference": "0x1234567890abcdef1234567890abcdef12345678",
844
+ "timestamp": "2025-11-04T05:21:22.149Z",
845
+ "paymentProcessor": "request-network"
846
+ }
847
+ }
848
+ }
849
+ }
850
+ }