@dominusnode/chatgpt 1.3.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.
package/openapi.yaml ADDED
@@ -0,0 +1,1851 @@
1
+ openapi: 3.1.0
2
+ info:
3
+ title: Dominus Node Proxy API
4
+ description: |
5
+ Dominus Node is a rotating proxy-as-a-service platform with datacenter ($3/GB) and
6
+ residential ($5/GB) proxy pools. This API provides account management, API key provisioning,
7
+ prepaid wallet billing (Stripe, crypto, PayPal), usage monitoring, agentic sub-wallets
8
+ for AI agents, and team-based shared billing.
9
+ version: 1.0.0
10
+ contact:
11
+ name: Dominus Node Support
12
+ email: support@dominusnode.com
13
+ url: https://dominusnode.com
14
+ license:
15
+ name: MIT
16
+ url: https://opensource.org/licenses/MIT
17
+
18
+ servers:
19
+ - url: https://api.dominusnode.com
20
+ description: Production API
21
+
22
+ security:
23
+ - BearerAuth: []
24
+
25
+ tags:
26
+ - name: Auth
27
+ description: Account registration, login, and token management
28
+ - name: Keys
29
+ description: API key creation, listing, and revocation
30
+ - name: Wallet
31
+ description: Wallet balance, transactions, and top-up via Stripe, crypto, or PayPal
32
+ - name: Usage
33
+ description: Bandwidth usage statistics and records
34
+ - name: Agentic Wallets
35
+ description: Sub-wallets for AI agents with spending limits
36
+ - name: Teams
37
+ description: Team management with shared wallet billing
38
+ - name: Proxy
39
+ description: Proxy server configuration details
40
+ - name: Sessions
41
+ description: Active proxy session monitoring
42
+ - name: Health
43
+ description: Service health check
44
+
45
+ paths:
46
+ # ─── Auth ───────────────────────────────────────────────────────────
47
+ /api/auth/register:
48
+ post:
49
+ operationId: register
50
+ tags: [Auth]
51
+ summary: Create a new account
52
+ security: []
53
+ parameters:
54
+ - $ref: "#/components/parameters/AgentHeader"
55
+ - $ref: "#/components/parameters/AgentSecretHeader"
56
+ requestBody:
57
+ required: true
58
+ content:
59
+ application/json:
60
+ schema:
61
+ type: object
62
+ required: [email, password]
63
+ properties:
64
+ email:
65
+ type: string
66
+ format: email
67
+ description: Account email address
68
+ example: user@example.com
69
+ password:
70
+ type: string
71
+ minLength: 8
72
+ maxLength: 128
73
+ description: Account password (8-128 characters)
74
+ captchaToken:
75
+ type: string
76
+ description: reCAPTCHA v3 token (required if reCAPTCHA is enabled)
77
+ responses:
78
+ "201":
79
+ description: Account created successfully
80
+ content:
81
+ application/json:
82
+ schema:
83
+ type: object
84
+ properties:
85
+ token:
86
+ type: string
87
+ description: JWT access token (15 min expiry)
88
+ refreshToken:
89
+ type: string
90
+ description: Refresh token (7 day expiry)
91
+ user:
92
+ $ref: "#/components/schemas/User"
93
+ "400":
94
+ $ref: "#/components/responses/BadRequest"
95
+ "409":
96
+ description: Email already registered
97
+ content:
98
+ application/json:
99
+ schema:
100
+ $ref: "#/components/schemas/Error"
101
+ "429":
102
+ $ref: "#/components/responses/RateLimited"
103
+
104
+ /api/auth/login:
105
+ post:
106
+ operationId: login
107
+ tags: [Auth]
108
+ summary: Log in and get JWT tokens
109
+ security: []
110
+ parameters:
111
+ - $ref: "#/components/parameters/AgentHeader"
112
+ - $ref: "#/components/parameters/AgentSecretHeader"
113
+ requestBody:
114
+ required: true
115
+ content:
116
+ application/json:
117
+ schema:
118
+ type: object
119
+ required: [email, password]
120
+ properties:
121
+ email:
122
+ type: string
123
+ format: email
124
+ password:
125
+ type: string
126
+ maxLength: 128
127
+ captchaToken:
128
+ type: string
129
+ description: reCAPTCHA v3 token (required if reCAPTCHA is enabled)
130
+ responses:
131
+ "200":
132
+ description: Login successful (or MFA challenge required)
133
+ content:
134
+ application/json:
135
+ schema:
136
+ oneOf:
137
+ - type: object
138
+ properties:
139
+ token:
140
+ type: string
141
+ description: JWT access token
142
+ refreshToken:
143
+ type: string
144
+ description: Refresh token
145
+ userId:
146
+ type: string
147
+ format: uuid
148
+ email:
149
+ type: string
150
+ user:
151
+ $ref: "#/components/schemas/User"
152
+ - type: object
153
+ properties:
154
+ mfaRequired:
155
+ type: boolean
156
+ enum: [true]
157
+ mfaChallengeToken:
158
+ type: string
159
+ description: Short-lived MFA challenge token
160
+ "401":
161
+ description: Invalid credentials
162
+ content:
163
+ application/json:
164
+ schema:
165
+ $ref: "#/components/schemas/Error"
166
+ "429":
167
+ $ref: "#/components/responses/RateLimited"
168
+
169
+ # ─── Keys ───────────────────────────────────────────────────────────
170
+ /api/keys:
171
+ post:
172
+ operationId: createApiKey
173
+ tags: [Keys]
174
+ summary: Create a new API key
175
+ description: |
176
+ Creates a new API key for proxy authentication. The raw key is returned only once
177
+ in the response -- store it securely. Requires verified email.
178
+ requestBody:
179
+ required: false
180
+ content:
181
+ application/json:
182
+ schema:
183
+ type: object
184
+ properties:
185
+ label:
186
+ type: string
187
+ maxLength: 100
188
+ default: Default
189
+ description: Human-readable label for the key
190
+ responses:
191
+ "201":
192
+ description: API key created
193
+ content:
194
+ application/json:
195
+ schema:
196
+ type: object
197
+ properties:
198
+ key:
199
+ type: string
200
+ description: Raw API key (shown only once, starts with dn_live_)
201
+ example: dn_live_abc123...
202
+ id:
203
+ type: string
204
+ format: uuid
205
+ prefix:
206
+ type: string
207
+ description: Key prefix for identification
208
+ label:
209
+ type: string
210
+ created_at:
211
+ type: string
212
+ format: date-time
213
+ "403":
214
+ description: Email not verified or account suspended
215
+ content:
216
+ application/json:
217
+ schema:
218
+ $ref: "#/components/schemas/Error"
219
+ get:
220
+ operationId: listApiKeys
221
+ tags: [Keys]
222
+ summary: List all API keys
223
+ responses:
224
+ "200":
225
+ description: List of API keys
226
+ content:
227
+ application/json:
228
+ schema:
229
+ type: object
230
+ properties:
231
+ keys:
232
+ type: array
233
+ items:
234
+ $ref: "#/components/schemas/ApiKey"
235
+
236
+ /api/keys/{id}:
237
+ delete:
238
+ operationId: revokeApiKey
239
+ tags: [Keys]
240
+ summary: Revoke an API key
241
+ parameters:
242
+ - name: id
243
+ in: path
244
+ required: true
245
+ schema:
246
+ type: string
247
+ format: uuid
248
+ responses:
249
+ "204":
250
+ description: Key revoked successfully
251
+ "404":
252
+ description: Key not found or already revoked
253
+ content:
254
+ application/json:
255
+ schema:
256
+ $ref: "#/components/schemas/Error"
257
+
258
+ # ─── Wallet ─────────────────────────────────────────────────────────
259
+ /api/wallet:
260
+ get:
261
+ operationId: getWalletBalance
262
+ tags: [Wallet]
263
+ summary: Get wallet balance
264
+ responses:
265
+ "200":
266
+ description: Current wallet balance
267
+ content:
268
+ application/json:
269
+ schema:
270
+ type: object
271
+ properties:
272
+ balanceCents:
273
+ type: integer
274
+ description: Balance in cents
275
+ example: 5000
276
+ balanceUsd:
277
+ type: number
278
+ format: float
279
+ description: Balance in USD
280
+ example: 50.00
281
+ currency:
282
+ type: string
283
+ example: usd
284
+ lastToppedUp:
285
+ type: string
286
+ format: date-time
287
+ nullable: true
288
+ "404":
289
+ description: Wallet not found
290
+ content:
291
+ application/json:
292
+ schema:
293
+ $ref: "#/components/schemas/Error"
294
+
295
+ /api/wallet/transactions:
296
+ get:
297
+ operationId: getWalletTransactions
298
+ tags: [Wallet]
299
+ summary: Get wallet transaction history
300
+ parameters:
301
+ - name: limit
302
+ in: query
303
+ schema:
304
+ type: integer
305
+ minimum: 1
306
+ maximum: 100
307
+ default: 50
308
+ - name: offset
309
+ in: query
310
+ schema:
311
+ type: integer
312
+ minimum: 0
313
+ default: 0
314
+ responses:
315
+ "200":
316
+ description: List of wallet transactions
317
+ content:
318
+ application/json:
319
+ schema:
320
+ type: object
321
+ properties:
322
+ transactions:
323
+ type: array
324
+ items:
325
+ $ref: "#/components/schemas/WalletTransaction"
326
+
327
+ /api/wallet/topup/stripe:
328
+ post:
329
+ operationId: topUpStripe
330
+ tags: [Wallet]
331
+ summary: Create Stripe checkout session for wallet top-up
332
+ description: Requires verified email. Returns a Stripe Checkout URL to complete payment.
333
+ requestBody:
334
+ required: true
335
+ content:
336
+ application/json:
337
+ schema:
338
+ type: object
339
+ required: [amountCents]
340
+ properties:
341
+ amountCents:
342
+ type: integer
343
+ minimum: 500
344
+ maximum: 100000
345
+ description: Amount in cents ($5 - $1,000)
346
+ example: 2000
347
+ responses:
348
+ "200":
349
+ description: Checkout session created
350
+ content:
351
+ application/json:
352
+ schema:
353
+ type: object
354
+ properties:
355
+ sessionId:
356
+ type: string
357
+ description: Stripe session ID
358
+ url:
359
+ type: string
360
+ format: uri
361
+ description: Stripe Checkout URL to redirect user
362
+ "400":
363
+ $ref: "#/components/responses/BadRequest"
364
+ "403":
365
+ description: Email not verified
366
+ content:
367
+ application/json:
368
+ schema:
369
+ $ref: "#/components/schemas/Error"
370
+
371
+ /api/wallet/topup/crypto:
372
+ post:
373
+ operationId: topUpCrypto
374
+ tags: [Wallet]
375
+ summary: Create crypto payment invoice
376
+ description: |
377
+ Requires verified email. Supports BTC, ETH, LTC, XMR, ZEC, USDC, SOL, USDT, DAI, BNB.
378
+ Amount range: $10 - $1,000.
379
+ requestBody:
380
+ required: true
381
+ content:
382
+ application/json:
383
+ schema:
384
+ type: object
385
+ required: [amountUsd, currency]
386
+ properties:
387
+ amountUsd:
388
+ type: number
389
+ minimum: 10
390
+ maximum: 1000
391
+ description: Amount in USD
392
+ example: 50
393
+ currency:
394
+ type: string
395
+ enum: [btc, eth, ltc, xmr, zec, usdc, sol, usdt, dai, bnb]
396
+ description: Cryptocurrency to pay with
397
+ responses:
398
+ "200":
399
+ description: Crypto invoice created
400
+ content:
401
+ application/json:
402
+ schema:
403
+ type: object
404
+ properties:
405
+ invoiceId:
406
+ type: string
407
+ invoiceUrl:
408
+ type: string
409
+ format: uri
410
+ description: URL to view/pay the invoice
411
+ payCurrency:
412
+ type: string
413
+ priceAmount:
414
+ type: number
415
+ "400":
416
+ $ref: "#/components/responses/BadRequest"
417
+ "403":
418
+ description: Email not verified
419
+ content:
420
+ application/json:
421
+ schema:
422
+ $ref: "#/components/schemas/Error"
423
+
424
+ /api/wallet/topup/paypal:
425
+ post:
426
+ operationId: topUpPaypal
427
+ tags: [Wallet]
428
+ summary: Create PayPal order for wallet top-up
429
+ description: Requires verified email. Returns a PayPal approval URL.
430
+ requestBody:
431
+ required: true
432
+ content:
433
+ application/json:
434
+ schema:
435
+ type: object
436
+ required: [amountCents]
437
+ properties:
438
+ amountCents:
439
+ type: integer
440
+ minimum: 500
441
+ maximum: 100000
442
+ description: Amount in cents ($5 - $1,000)
443
+ responses:
444
+ "200":
445
+ description: PayPal order created
446
+ content:
447
+ application/json:
448
+ schema:
449
+ type: object
450
+ properties:
451
+ orderId:
452
+ type: string
453
+ approvalUrl:
454
+ type: string
455
+ format: uri
456
+ description: PayPal approval URL to redirect user
457
+ amountCents:
458
+ type: integer
459
+ "400":
460
+ $ref: "#/components/responses/BadRequest"
461
+ "403":
462
+ description: Email not verified
463
+ content:
464
+ application/json:
465
+ schema:
466
+ $ref: "#/components/schemas/Error"
467
+
468
+ /api/wallet/paypal/capture/{orderId}:
469
+ post:
470
+ operationId: capturePaypalOrder
471
+ tags: [Wallet]
472
+ summary: Capture a PayPal order after approval
473
+ parameters:
474
+ - name: orderId
475
+ in: path
476
+ required: true
477
+ schema:
478
+ type: string
479
+ responses:
480
+ "200":
481
+ description: Payment captured successfully
482
+ content:
483
+ application/json:
484
+ schema:
485
+ type: object
486
+ properties:
487
+ success:
488
+ type: boolean
489
+ amountCents:
490
+ type: integer
491
+ "400":
492
+ $ref: "#/components/responses/BadRequest"
493
+
494
+ /api/wallet/paypal/status/{orderId}:
495
+ get:
496
+ operationId: getPaypalOrderStatus
497
+ tags: [Wallet]
498
+ summary: Check PayPal order status
499
+ parameters:
500
+ - name: orderId
501
+ in: path
502
+ required: true
503
+ schema:
504
+ type: string
505
+ responses:
506
+ "200":
507
+ description: PayPal order status
508
+ content:
509
+ application/json:
510
+ schema:
511
+ type: object
512
+ properties:
513
+ orderId:
514
+ type: string
515
+ status:
516
+ type: string
517
+ enum: [pending, completed, failed]
518
+ amountCents:
519
+ type: integer
520
+ provider:
521
+ type: string
522
+ example: paypal
523
+ createdAt:
524
+ type: string
525
+ format: date-time
526
+ "404":
527
+ description: Order not found
528
+ content:
529
+ application/json:
530
+ schema:
531
+ $ref: "#/components/schemas/Error"
532
+
533
+ /api/wallet/crypto/status/{invoiceId}:
534
+ get:
535
+ operationId: getCryptoInvoiceStatus
536
+ tags: [Wallet]
537
+ summary: Check crypto payment invoice status
538
+ parameters:
539
+ - name: invoiceId
540
+ in: path
541
+ required: true
542
+ schema:
543
+ type: string
544
+ format: uuid
545
+ responses:
546
+ "200":
547
+ description: Invoice status
548
+ content:
549
+ application/json:
550
+ schema:
551
+ type: object
552
+ properties:
553
+ invoiceId:
554
+ type: string
555
+ format: uuid
556
+ status:
557
+ type: string
558
+ enum: [pending, completed, failed]
559
+ amountCents:
560
+ type: integer
561
+ provider:
562
+ type: string
563
+ createdAt:
564
+ type: string
565
+ format: date-time
566
+ "404":
567
+ description: Invoice not found
568
+ content:
569
+ application/json:
570
+ schema:
571
+ $ref: "#/components/schemas/Error"
572
+
573
+ # ─── Usage ──────────────────────────────────────────────────────────
574
+ /api/usage:
575
+ get:
576
+ operationId: getUsage
577
+ tags: [Usage]
578
+ summary: Get bandwidth usage records and summary
579
+ parameters:
580
+ - name: since
581
+ in: query
582
+ description: Start date (ISO 8601). Defaults to 30 days ago.
583
+ schema:
584
+ type: string
585
+ format: date-time
586
+ - name: until
587
+ in: query
588
+ description: End date (ISO 8601). Defaults to now.
589
+ schema:
590
+ type: string
591
+ format: date-time
592
+ - name: limit
593
+ in: query
594
+ schema:
595
+ type: integer
596
+ minimum: 1
597
+ maximum: 1000
598
+ default: 200
599
+ - name: offset
600
+ in: query
601
+ schema:
602
+ type: integer
603
+ minimum: 0
604
+ default: 0
605
+ responses:
606
+ "200":
607
+ description: Usage summary and records
608
+ content:
609
+ application/json:
610
+ schema:
611
+ type: object
612
+ properties:
613
+ summary:
614
+ type: object
615
+ properties:
616
+ totalBytes:
617
+ type: integer
618
+ description: Total bytes transferred
619
+ totalCostCents:
620
+ type: integer
621
+ description: Total cost in cents
622
+ requestCount:
623
+ type: integer
624
+ totalGB:
625
+ type: number
626
+ format: float
627
+ totalCostUsd:
628
+ type: number
629
+ format: float
630
+ records:
631
+ type: array
632
+ items:
633
+ $ref: "#/components/schemas/UsageRecord"
634
+ pagination:
635
+ type: object
636
+ properties:
637
+ limit:
638
+ type: integer
639
+ offset:
640
+ type: integer
641
+ total:
642
+ type: integer
643
+ period:
644
+ type: object
645
+ properties:
646
+ since:
647
+ type: string
648
+ format: date-time
649
+ until:
650
+ type: string
651
+ format: date-time
652
+
653
+ # ─── Agentic Wallets ────────────────────────────────────────────────
654
+ /api/agent-wallet:
655
+ post:
656
+ operationId: createAgenticWallet
657
+ tags: [Agentic Wallets]
658
+ summary: Create a new agentic sub-wallet
659
+ description: |
660
+ Creates a custodial sub-wallet for an AI agent with a configurable spending limit.
661
+ Requires verified email. Maximum 20 agentic wallets per user.
662
+ requestBody:
663
+ required: true
664
+ content:
665
+ application/json:
666
+ schema:
667
+ type: object
668
+ required: [label, spendingLimitCents]
669
+ properties:
670
+ label:
671
+ type: string
672
+ minLength: 1
673
+ maxLength: 100
674
+ description: Human-readable wallet label
675
+ example: Scraping Agent
676
+ spendingLimitCents:
677
+ type: integer
678
+ minimum: 0
679
+ maximum: 1000000
680
+ description: Per-transaction spending limit in cents
681
+ example: 10000
682
+ dailyLimitCents:
683
+ type: integer
684
+ minimum: 1
685
+ maximum: 1000000
686
+ description: Optional daily budget cap in cents. Omit to leave uncapped.
687
+ example: 50000
688
+ allowedDomains:
689
+ type: array
690
+ maxItems: 100
691
+ items:
692
+ type: string
693
+ maxLength: 253
694
+ description: Optional domain allowlist (max 100 entries, each <= 253 chars). Omit to allow all domains.
695
+ example: ["httpbin.org", "example.com"]
696
+ responses:
697
+ "201":
698
+ description: Agentic wallet created
699
+ content:
700
+ application/json:
701
+ schema:
702
+ $ref: "#/components/schemas/AgenticWallet"
703
+ "403":
704
+ description: Email not verified
705
+ content:
706
+ application/json:
707
+ schema:
708
+ $ref: "#/components/schemas/Error"
709
+ "409":
710
+ description: Maximum wallet count reached
711
+ content:
712
+ application/json:
713
+ schema:
714
+ $ref: "#/components/schemas/Error"
715
+ get:
716
+ operationId: listAgenticWallets
717
+ tags: [Agentic Wallets]
718
+ summary: List all agentic wallets
719
+ responses:
720
+ "200":
721
+ description: List of agentic wallets
722
+ content:
723
+ application/json:
724
+ schema:
725
+ type: object
726
+ properties:
727
+ wallets:
728
+ type: array
729
+ items:
730
+ $ref: "#/components/schemas/AgenticWallet"
731
+
732
+ /api/agent-wallet/{id}:
733
+ get:
734
+ operationId: getAgenticWallet
735
+ tags: [Agentic Wallets]
736
+ summary: Get agentic wallet details
737
+ parameters:
738
+ - name: id
739
+ in: path
740
+ required: true
741
+ schema:
742
+ type: string
743
+ format: uuid
744
+ responses:
745
+ "200":
746
+ description: Agentic wallet details
747
+ content:
748
+ application/json:
749
+ schema:
750
+ $ref: "#/components/schemas/AgenticWallet"
751
+ "404":
752
+ description: Wallet not found
753
+ content:
754
+ application/json:
755
+ schema:
756
+ $ref: "#/components/schemas/Error"
757
+ delete:
758
+ operationId: deleteAgenticWallet
759
+ tags: [Agentic Wallets]
760
+ summary: Delete agentic wallet and refund remaining balance
761
+ description: Remaining balance is refunded to the main wallet. Frozen wallets must be unfrozen first.
762
+ parameters:
763
+ - name: id
764
+ in: path
765
+ required: true
766
+ schema:
767
+ type: string
768
+ format: uuid
769
+ responses:
770
+ "200":
771
+ description: Wallet deleted and balance refunded
772
+ content:
773
+ application/json:
774
+ schema:
775
+ type: object
776
+ properties:
777
+ deleted:
778
+ type: boolean
779
+ refundedCents:
780
+ type: integer
781
+ description: Amount refunded to main wallet
782
+ "400":
783
+ description: Cannot delete frozen wallet
784
+ content:
785
+ application/json:
786
+ schema:
787
+ $ref: "#/components/schemas/Error"
788
+ "404":
789
+ description: Wallet not found
790
+ content:
791
+ application/json:
792
+ schema:
793
+ $ref: "#/components/schemas/Error"
794
+
795
+ /api/agent-wallet/{id}/fund:
796
+ post:
797
+ operationId: fundAgenticWallet
798
+ tags: [Agentic Wallets]
799
+ summary: Fund agentic wallet from main wallet
800
+ description: Transfers funds from your main wallet to the agentic sub-wallet. Requires verified email.
801
+ parameters:
802
+ - name: id
803
+ in: path
804
+ required: true
805
+ schema:
806
+ type: string
807
+ format: uuid
808
+ requestBody:
809
+ required: true
810
+ content:
811
+ application/json:
812
+ schema:
813
+ type: object
814
+ required: [amountCents]
815
+ properties:
816
+ amountCents:
817
+ type: integer
818
+ minimum: 100
819
+ maximum: 1000000
820
+ description: Amount to transfer in cents ($1 - $10,000)
821
+ example: 500
822
+ responses:
823
+ "200":
824
+ description: Wallet funded successfully
825
+ content:
826
+ application/json:
827
+ schema:
828
+ type: object
829
+ properties:
830
+ transaction:
831
+ $ref: "#/components/schemas/AgenticWalletTransaction"
832
+ "400":
833
+ description: Insufficient balance or exceeds cap
834
+ content:
835
+ application/json:
836
+ schema:
837
+ $ref: "#/components/schemas/Error"
838
+ "404":
839
+ description: Wallet not found or not active
840
+ content:
841
+ application/json:
842
+ schema:
843
+ $ref: "#/components/schemas/Error"
844
+
845
+ /api/agent-wallet/{id}/transactions:
846
+ get:
847
+ operationId: getAgenticWalletTransactions
848
+ tags: [Agentic Wallets]
849
+ summary: Get agentic wallet transaction history
850
+ parameters:
851
+ - name: id
852
+ in: path
853
+ required: true
854
+ schema:
855
+ type: string
856
+ format: uuid
857
+ - name: limit
858
+ in: query
859
+ schema:
860
+ type: integer
861
+ minimum: 1
862
+ maximum: 100
863
+ default: 50
864
+ - name: offset
865
+ in: query
866
+ schema:
867
+ type: integer
868
+ minimum: 0
869
+ default: 0
870
+ responses:
871
+ "200":
872
+ description: Transaction history
873
+ content:
874
+ application/json:
875
+ schema:
876
+ type: object
877
+ properties:
878
+ transactions:
879
+ type: array
880
+ items:
881
+ $ref: "#/components/schemas/AgenticWalletTransaction"
882
+ "404":
883
+ description: Wallet not found
884
+ content:
885
+ application/json:
886
+ schema:
887
+ $ref: "#/components/schemas/Error"
888
+
889
+ /api/agent-wallet/{id}/freeze:
890
+ post:
891
+ operationId: freezeAgenticWallet
892
+ tags: [Agentic Wallets]
893
+ summary: Freeze agentic wallet
894
+ description: Freezing prevents all spending from the wallet. The wallet can be unfrozen later.
895
+ parameters:
896
+ - name: id
897
+ in: path
898
+ required: true
899
+ schema:
900
+ type: string
901
+ format: uuid
902
+ responses:
903
+ "200":
904
+ description: Wallet frozen
905
+ content:
906
+ application/json:
907
+ schema:
908
+ $ref: "#/components/schemas/AgenticWallet"
909
+ "404":
910
+ description: Wallet not found or not active
911
+ content:
912
+ application/json:
913
+ schema:
914
+ $ref: "#/components/schemas/Error"
915
+
916
+ /api/agent-wallet/{id}/unfreeze:
917
+ post:
918
+ operationId: unfreezeAgenticWallet
919
+ tags: [Agentic Wallets]
920
+ summary: Unfreeze agentic wallet
921
+ description: Restores a frozen wallet to active status so it can be used for spending again.
922
+ parameters:
923
+ - name: id
924
+ in: path
925
+ required: true
926
+ schema:
927
+ type: string
928
+ format: uuid
929
+ responses:
930
+ "200":
931
+ description: Wallet unfrozen
932
+ content:
933
+ application/json:
934
+ schema:
935
+ $ref: "#/components/schemas/AgenticWallet"
936
+ "404":
937
+ description: Wallet not found or not frozen
938
+ content:
939
+ application/json:
940
+ schema:
941
+ $ref: "#/components/schemas/Error"
942
+
943
+ /api/agent-wallet/{id}/policy:
944
+ patch:
945
+ operationId: updateAgenticWalletPolicy
946
+ tags: [Agentic Wallets]
947
+ summary: Update agentic wallet policy
948
+ description: |
949
+ Updates the daily limit and/or allowed domains policy on an agentic wallet.
950
+ Set a field to null to remove the restriction. Only active wallets can be updated.
951
+ parameters:
952
+ - name: id
953
+ in: path
954
+ required: true
955
+ schema:
956
+ type: string
957
+ format: uuid
958
+ requestBody:
959
+ required: true
960
+ content:
961
+ application/json:
962
+ schema:
963
+ type: object
964
+ properties:
965
+ dailyLimitCents:
966
+ type: integer
967
+ minimum: 1
968
+ maximum: 1000000
969
+ nullable: true
970
+ description: Daily budget cap in cents. Set to null to remove the daily limit.
971
+ example: 50000
972
+ allowedDomains:
973
+ type: array
974
+ maxItems: 100
975
+ nullable: true
976
+ items:
977
+ type: string
978
+ maxLength: 253
979
+ description: Domain allowlist (max 100 entries, each <= 253 chars). Set to null to allow all domains.
980
+ example: ["httpbin.org", "example.com"]
981
+ responses:
982
+ "200":
983
+ description: Wallet policy updated
984
+ content:
985
+ application/json:
986
+ schema:
987
+ $ref: "#/components/schemas/AgenticWallet"
988
+ "404":
989
+ description: Wallet not found or not active
990
+ content:
991
+ application/json:
992
+ schema:
993
+ $ref: "#/components/schemas/Error"
994
+ "422":
995
+ description: Validation error (invalid daily limit or domain entries)
996
+ content:
997
+ application/json:
998
+ schema:
999
+ $ref: "#/components/schemas/Error"
1000
+
1001
+ # ─── Teams ──────────────────────────────────────────────────────────
1002
+ /api/teams:
1003
+ post:
1004
+ operationId: createTeam
1005
+ tags: [Teams]
1006
+ summary: Create a new team
1007
+ description: Creates a team with a shared wallet. You become the owner. Requires verified email.
1008
+ requestBody:
1009
+ required: true
1010
+ content:
1011
+ application/json:
1012
+ schema:
1013
+ type: object
1014
+ required: [name]
1015
+ properties:
1016
+ name:
1017
+ type: string
1018
+ minLength: 1
1019
+ maxLength: 100
1020
+ description: Team name
1021
+ example: Engineering Team
1022
+ maxMembers:
1023
+ type: integer
1024
+ minimum: 1
1025
+ maximum: 100
1026
+ description: Maximum number of team members (default varies)
1027
+ responses:
1028
+ "201":
1029
+ description: Team created
1030
+ content:
1031
+ application/json:
1032
+ schema:
1033
+ $ref: "#/components/schemas/Team"
1034
+ "403":
1035
+ description: Email not verified
1036
+ content:
1037
+ application/json:
1038
+ schema:
1039
+ $ref: "#/components/schemas/Error"
1040
+ "409":
1041
+ description: Maximum team count reached
1042
+ content:
1043
+ application/json:
1044
+ schema:
1045
+ $ref: "#/components/schemas/Error"
1046
+ get:
1047
+ operationId: listTeams
1048
+ tags: [Teams]
1049
+ summary: List teams you belong to
1050
+ responses:
1051
+ "200":
1052
+ description: List of teams
1053
+ content:
1054
+ application/json:
1055
+ schema:
1056
+ type: object
1057
+ properties:
1058
+ teams:
1059
+ type: array
1060
+ items:
1061
+ $ref: "#/components/schemas/TeamListItem"
1062
+
1063
+ /api/teams/{id}:
1064
+ get:
1065
+ operationId: getTeam
1066
+ tags: [Teams]
1067
+ summary: Get team details
1068
+ parameters:
1069
+ - name: id
1070
+ in: path
1071
+ required: true
1072
+ schema:
1073
+ type: string
1074
+ format: uuid
1075
+ responses:
1076
+ "200":
1077
+ description: Team details
1078
+ content:
1079
+ application/json:
1080
+ schema:
1081
+ $ref: "#/components/schemas/TeamDetail"
1082
+ "404":
1083
+ description: Team not found
1084
+ content:
1085
+ application/json:
1086
+ schema:
1087
+ $ref: "#/components/schemas/Error"
1088
+ patch:
1089
+ operationId: updateTeam
1090
+ tags: [Teams]
1091
+ summary: Update team settings (owner/admin only)
1092
+ parameters:
1093
+ - name: id
1094
+ in: path
1095
+ required: true
1096
+ schema:
1097
+ type: string
1098
+ format: uuid
1099
+ requestBody:
1100
+ required: true
1101
+ content:
1102
+ application/json:
1103
+ schema:
1104
+ type: object
1105
+ properties:
1106
+ name:
1107
+ type: string
1108
+ minLength: 1
1109
+ maxLength: 100
1110
+ maxMembers:
1111
+ type: integer
1112
+ minimum: 1
1113
+ maximum: 100
1114
+ responses:
1115
+ "200":
1116
+ description: Team updated
1117
+ content:
1118
+ application/json:
1119
+ schema:
1120
+ $ref: "#/components/schemas/Team"
1121
+ "403":
1122
+ description: Not authorized (owner/admin only)
1123
+ content:
1124
+ application/json:
1125
+ schema:
1126
+ $ref: "#/components/schemas/Error"
1127
+ "404":
1128
+ description: Team not found
1129
+ content:
1130
+ application/json:
1131
+ schema:
1132
+ $ref: "#/components/schemas/Error"
1133
+
1134
+ /api/teams/{id}/wallet/fund:
1135
+ post:
1136
+ operationId: fundTeamWallet
1137
+ tags: [Teams]
1138
+ summary: Fund team wallet from personal wallet
1139
+ description: Transfers funds from your personal wallet to the team shared wallet. Requires verified email.
1140
+ parameters:
1141
+ - name: id
1142
+ in: path
1143
+ required: true
1144
+ schema:
1145
+ type: string
1146
+ format: uuid
1147
+ requestBody:
1148
+ required: true
1149
+ content:
1150
+ application/json:
1151
+ schema:
1152
+ type: object
1153
+ required: [amountCents]
1154
+ properties:
1155
+ amountCents:
1156
+ type: integer
1157
+ minimum: 100
1158
+ maximum: 1000000
1159
+ description: Amount to transfer in cents ($1 - $10,000)
1160
+ responses:
1161
+ "200":
1162
+ description: Team wallet funded
1163
+ content:
1164
+ application/json:
1165
+ schema:
1166
+ type: object
1167
+ properties:
1168
+ transaction:
1169
+ $ref: "#/components/schemas/TeamWalletTransaction"
1170
+ "400":
1171
+ description: Insufficient balance or exceeds cap
1172
+ content:
1173
+ application/json:
1174
+ schema:
1175
+ $ref: "#/components/schemas/Error"
1176
+ "403":
1177
+ description: Not authorized
1178
+ content:
1179
+ application/json:
1180
+ schema:
1181
+ $ref: "#/components/schemas/Error"
1182
+
1183
+ /api/teams/{id}/keys:
1184
+ post:
1185
+ operationId: createTeamApiKey
1186
+ tags: [Teams]
1187
+ summary: Create a team API key
1188
+ description: Creates an API key that bills to the team wallet. Owner/admin only. Requires verified email.
1189
+ parameters:
1190
+ - name: id
1191
+ in: path
1192
+ required: true
1193
+ schema:
1194
+ type: string
1195
+ format: uuid
1196
+ requestBody:
1197
+ required: true
1198
+ content:
1199
+ application/json:
1200
+ schema:
1201
+ type: object
1202
+ required: [label]
1203
+ properties:
1204
+ label:
1205
+ type: string
1206
+ minLength: 1
1207
+ maxLength: 100
1208
+ description: Human-readable key label
1209
+ responses:
1210
+ "201":
1211
+ description: Team API key created (raw key shown only once)
1212
+ content:
1213
+ application/json:
1214
+ schema:
1215
+ type: object
1216
+ properties:
1217
+ key:
1218
+ type: string
1219
+ description: Raw API key (shown only once)
1220
+ id:
1221
+ type: string
1222
+ format: uuid
1223
+ prefix:
1224
+ type: string
1225
+ label:
1226
+ type: string
1227
+ createdAt:
1228
+ type: string
1229
+ format: date-time
1230
+ "403":
1231
+ description: Not authorized or email not verified
1232
+ content:
1233
+ application/json:
1234
+ schema:
1235
+ $ref: "#/components/schemas/Error"
1236
+
1237
+ /api/teams/{id}/wallet/transactions:
1238
+ get:
1239
+ operationId: getTeamWalletTransactions
1240
+ tags: [Teams]
1241
+ summary: Get team wallet transaction history
1242
+ parameters:
1243
+ - name: id
1244
+ in: path
1245
+ required: true
1246
+ schema:
1247
+ type: string
1248
+ format: uuid
1249
+ - name: limit
1250
+ in: query
1251
+ schema:
1252
+ type: integer
1253
+ minimum: 1
1254
+ maximum: 100
1255
+ default: 50
1256
+ - name: offset
1257
+ in: query
1258
+ schema:
1259
+ type: integer
1260
+ minimum: 0
1261
+ default: 0
1262
+ responses:
1263
+ "200":
1264
+ description: Team wallet transactions
1265
+ content:
1266
+ application/json:
1267
+ schema:
1268
+ type: object
1269
+ properties:
1270
+ transactions:
1271
+ type: array
1272
+ items:
1273
+ $ref: "#/components/schemas/TeamWalletTransaction"
1274
+ "403":
1275
+ description: Not a team member
1276
+ content:
1277
+ application/json:
1278
+ schema:
1279
+ $ref: "#/components/schemas/Error"
1280
+
1281
+ /api/teams/{id}/members:
1282
+ get:
1283
+ operationId: listTeamMembers
1284
+ tags: [Teams]
1285
+ summary: List team members
1286
+ parameters:
1287
+ - name: id
1288
+ in: path
1289
+ required: true
1290
+ schema:
1291
+ type: string
1292
+ format: uuid
1293
+ responses:
1294
+ "200":
1295
+ description: List of team members
1296
+ content:
1297
+ application/json:
1298
+ schema:
1299
+ type: object
1300
+ properties:
1301
+ members:
1302
+ type: array
1303
+ items:
1304
+ $ref: "#/components/schemas/TeamMember"
1305
+ "403":
1306
+ description: Not a team member
1307
+ content:
1308
+ application/json:
1309
+ schema:
1310
+ $ref: "#/components/schemas/Error"
1311
+
1312
+ /api/teams/{id}/members/{userId}:
1313
+ patch:
1314
+ operationId: updateTeamMemberRole
1315
+ tags: [Teams]
1316
+ summary: Update a team member's role (owner only)
1317
+ parameters:
1318
+ - name: id
1319
+ in: path
1320
+ required: true
1321
+ schema:
1322
+ type: string
1323
+ format: uuid
1324
+ description: Team ID
1325
+ - name: userId
1326
+ in: path
1327
+ required: true
1328
+ schema:
1329
+ type: string
1330
+ format: uuid
1331
+ description: User ID of the member to update
1332
+ requestBody:
1333
+ required: true
1334
+ content:
1335
+ application/json:
1336
+ schema:
1337
+ type: object
1338
+ required: [role]
1339
+ properties:
1340
+ role:
1341
+ type: string
1342
+ enum: [member, admin]
1343
+ responses:
1344
+ "200":
1345
+ description: Member role updated
1346
+ content:
1347
+ application/json:
1348
+ schema:
1349
+ $ref: "#/components/schemas/TeamMember"
1350
+ "403":
1351
+ description: Not authorized (owner only)
1352
+ content:
1353
+ application/json:
1354
+ schema:
1355
+ $ref: "#/components/schemas/Error"
1356
+ "404":
1357
+ description: Member not found
1358
+ content:
1359
+ application/json:
1360
+ schema:
1361
+ $ref: "#/components/schemas/Error"
1362
+
1363
+ # ─── x402 Protocol ─────────────────────────────────────────────────
1364
+ /api/x402/info:
1365
+ get:
1366
+ operationId: getX402Info
1367
+ tags: [Wallet]
1368
+ security: []
1369
+ summary: Get x402 micropayment protocol information
1370
+ description: |
1371
+ Returns x402 HTTP 402 Payment Required protocol details including supported
1372
+ facilitators (Coinbase, PayAI), pricing, supported currencies, wallet type,
1373
+ and agentic wallet information for AI agent micropayments.
1374
+ responses:
1375
+ "200":
1376
+ description: x402 protocol information
1377
+ content:
1378
+ application/json:
1379
+ schema:
1380
+ type: object
1381
+ properties:
1382
+ supported:
1383
+ type: boolean
1384
+ description: Whether x402 is supported
1385
+ enabled:
1386
+ type: boolean
1387
+ description: Whether x402 is currently enabled
1388
+ protocol:
1389
+ type: string
1390
+ description: Protocol identifier
1391
+ example: x402
1392
+ version:
1393
+ type: string
1394
+ description: Protocol version
1395
+ example: "1.0"
1396
+ facilitators:
1397
+ type: object
1398
+ description: Supported payment facilitators
1399
+ pricing:
1400
+ type: object
1401
+ description: Pricing details for proxy usage
1402
+ currencies:
1403
+ type: array
1404
+ items:
1405
+ type: string
1406
+ description: Supported payment currencies
1407
+ walletType:
1408
+ type: string
1409
+ description: Type of wallet used
1410
+ agenticWallets:
1411
+ type: boolean
1412
+ description: Whether agentic wallets are available for AI agents
1413
+
1414
+ # ─── Proxy Config ───────────────────────────────────────────────────
1415
+ /api/proxy/config:
1416
+ get:
1417
+ operationId: getProxyConfig
1418
+ tags: [Proxy]
1419
+ summary: Get proxy server connection details
1420
+ description: Returns HTTP and SOCKS5 proxy host/port, supported countries, and geo-targeting options.
1421
+ responses:
1422
+ "200":
1423
+ description: Proxy configuration
1424
+ content:
1425
+ application/json:
1426
+ schema:
1427
+ type: object
1428
+ properties:
1429
+ httpProxy:
1430
+ type: object
1431
+ properties:
1432
+ host:
1433
+ type: string
1434
+ example: proxy.dominusnode.com
1435
+ port:
1436
+ type: integer
1437
+ example: 8080
1438
+ socks5Proxy:
1439
+ type: object
1440
+ properties:
1441
+ host:
1442
+ type: string
1443
+ port:
1444
+ type: integer
1445
+ example: 1080
1446
+ supportedCountries:
1447
+ type: array
1448
+ items:
1449
+ type: string
1450
+ example:
1451
+ [
1452
+ "US",
1453
+ "GB",
1454
+ "DE",
1455
+ "FR",
1456
+ "JP",
1457
+ "BR",
1458
+ "AU",
1459
+ "CA",
1460
+ "IN",
1461
+ "NL",
1462
+ "SG",
1463
+ "KR",
1464
+ ]
1465
+ blockedCountries:
1466
+ type: array
1467
+ items:
1468
+ type: string
1469
+ description: OFAC-sanctioned countries
1470
+ example: ["CU", "IR", "KP", "RU", "SY"]
1471
+ maxRotationIntervalMinutes:
1472
+ type: integer
1473
+ example: 60
1474
+ minRotationIntervalMinutes:
1475
+ type: integer
1476
+ example: 1
1477
+
1478
+ # ─── Sessions ───────────────────────────────────────────────────────
1479
+ /api/sessions/active:
1480
+ get:
1481
+ operationId: getActiveSessions
1482
+ tags: [Sessions]
1483
+ summary: List active proxy sessions
1484
+ responses:
1485
+ "200":
1486
+ description: Active sessions
1487
+ content:
1488
+ application/json:
1489
+ schema:
1490
+ type: object
1491
+ properties:
1492
+ sessions:
1493
+ type: array
1494
+ items:
1495
+ type: object
1496
+ properties:
1497
+ id:
1498
+ type: string
1499
+ startedAt:
1500
+ type: string
1501
+ format: date-time
1502
+ status:
1503
+ type: string
1504
+ enum: [active]
1505
+
1506
+ # ─── Health ─────────────────────────────────────────────────────────
1507
+ /api/health:
1508
+ get:
1509
+ operationId: healthCheck
1510
+ tags: [Health]
1511
+ summary: Service health check
1512
+ security: []
1513
+ responses:
1514
+ "200":
1515
+ description: Service is healthy
1516
+ content:
1517
+ application/json:
1518
+ schema:
1519
+ type: object
1520
+ properties:
1521
+ status:
1522
+ type: string
1523
+ enum: [ok]
1524
+ service:
1525
+ type: string
1526
+ example: dominusnode-api
1527
+ db:
1528
+ type: string
1529
+ enum: [connected]
1530
+ "503":
1531
+ description: Service is unhealthy
1532
+ content:
1533
+ application/json:
1534
+ schema:
1535
+ type: object
1536
+ properties:
1537
+ status:
1538
+ type: string
1539
+ enum: [error]
1540
+ service:
1541
+ type: string
1542
+ db:
1543
+ type: string
1544
+ enum: [disconnected]
1545
+
1546
+ components:
1547
+ securitySchemes:
1548
+ BearerAuth:
1549
+ type: http
1550
+ scheme: bearer
1551
+ bearerFormat: JWT
1552
+ description: |
1553
+ JWT access token obtained from POST /api/auth/login or POST /api/auth/register.
1554
+ Tokens expire after 15 minutes. Use POST /api/auth/refresh to get a new token pair.
1555
+ AgentSecret:
1556
+ type: apiKey
1557
+ in: header
1558
+ name: X-DominusNode-Agent-Secret
1559
+ description: |
1560
+ Agent secret for AI/MCP captcha bypass. When provided alongside the
1561
+ X-DominusNode-Agent: mcp header, bypasses reCAPTCHA on register/login
1562
+ and auto-verifies email. Configured server-side via MCP_AGENT_SECRET env var.
1563
+
1564
+ parameters:
1565
+ AgentHeader:
1566
+ name: X-DominusNode-Agent
1567
+ in: header
1568
+ required: false
1569
+ schema:
1570
+ type: string
1571
+ enum: [mcp]
1572
+ description: Set to "mcp" to identify as an AI agent (requires X-DominusNode-Agent-Secret)
1573
+ AgentSecretHeader:
1574
+ name: X-DominusNode-Agent-Secret
1575
+ in: header
1576
+ required: false
1577
+ schema:
1578
+ type: string
1579
+ description: Agent secret for captcha bypass and email auto-verification
1580
+
1581
+ schemas:
1582
+ Error:
1583
+ type: object
1584
+ properties:
1585
+ error:
1586
+ type: string
1587
+ description: Human-readable error message
1588
+
1589
+ User:
1590
+ type: object
1591
+ properties:
1592
+ id:
1593
+ type: string
1594
+ format: uuid
1595
+ email:
1596
+ type: string
1597
+ format: email
1598
+ created_at:
1599
+ type: string
1600
+ format: date-time
1601
+ is_admin:
1602
+ type: boolean
1603
+
1604
+ ApiKey:
1605
+ type: object
1606
+ properties:
1607
+ id:
1608
+ type: string
1609
+ format: uuid
1610
+ prefix:
1611
+ type: string
1612
+ description: First characters of the key for identification
1613
+ label:
1614
+ type: string
1615
+ created_at:
1616
+ type: string
1617
+ format: date-time
1618
+ revoked_at:
1619
+ type: string
1620
+ format: date-time
1621
+ nullable: true
1622
+
1623
+ WalletTransaction:
1624
+ type: object
1625
+ properties:
1626
+ id:
1627
+ type: string
1628
+ format: uuid
1629
+ type:
1630
+ type: string
1631
+ enum: [topup, usage_debit, refund]
1632
+ amountCents:
1633
+ type: integer
1634
+ amountUsd:
1635
+ type: number
1636
+ format: float
1637
+ description:
1638
+ type: string
1639
+ paymentProvider:
1640
+ type: string
1641
+ nullable: true
1642
+ enum: [stripe, nowpayments, paypal, null]
1643
+ createdAt:
1644
+ type: string
1645
+ format: date-time
1646
+
1647
+ UsageRecord:
1648
+ type: object
1649
+ properties:
1650
+ id:
1651
+ type: string
1652
+ format: uuid
1653
+ sessionId:
1654
+ type: string
1655
+ bytesIn:
1656
+ type: integer
1657
+ bytesOut:
1658
+ type: integer
1659
+ totalBytes:
1660
+ type: integer
1661
+ costCents:
1662
+ type: integer
1663
+ proxyType:
1664
+ type: string
1665
+ enum: [dc, residential]
1666
+ targetHost:
1667
+ type: string
1668
+ createdAt:
1669
+ type: string
1670
+ format: date-time
1671
+
1672
+ AgenticWallet:
1673
+ type: object
1674
+ properties:
1675
+ id:
1676
+ type: string
1677
+ format: uuid
1678
+ label:
1679
+ type: string
1680
+ balanceCents:
1681
+ type: integer
1682
+ spendingLimitCents:
1683
+ type: integer
1684
+ dailyLimitCents:
1685
+ type: integer
1686
+ nullable: true
1687
+ description: Daily budget cap in cents, or null if uncapped
1688
+ allowedDomains:
1689
+ type: array
1690
+ nullable: true
1691
+ items:
1692
+ type: string
1693
+ description: Domain allowlist, or null if all domains are allowed
1694
+ status:
1695
+ type: string
1696
+ enum: [active, frozen, deleted]
1697
+ createdAt:
1698
+ type: string
1699
+ format: date-time
1700
+
1701
+ AgenticWalletTransaction:
1702
+ type: object
1703
+ properties:
1704
+ id:
1705
+ type: string
1706
+ format: uuid
1707
+ walletId:
1708
+ type: string
1709
+ format: uuid
1710
+ type:
1711
+ type: string
1712
+ enum: [fund, spend, refund]
1713
+ amountCents:
1714
+ type: integer
1715
+ description:
1716
+ type: string
1717
+ sessionId:
1718
+ type: string
1719
+ nullable: true
1720
+ createdAt:
1721
+ type: string
1722
+ format: date-time
1723
+
1724
+ Team:
1725
+ type: object
1726
+ properties:
1727
+ id:
1728
+ type: string
1729
+ format: uuid
1730
+ name:
1731
+ type: string
1732
+ ownerId:
1733
+ type: string
1734
+ format: uuid
1735
+ maxMembers:
1736
+ type: integer
1737
+ status:
1738
+ type: string
1739
+ enum: [active]
1740
+ walletId:
1741
+ type: string
1742
+ format: uuid
1743
+ createdAt:
1744
+ type: string
1745
+ format: date-time
1746
+
1747
+ TeamListItem:
1748
+ type: object
1749
+ properties:
1750
+ id:
1751
+ type: string
1752
+ format: uuid
1753
+ name:
1754
+ type: string
1755
+ ownerId:
1756
+ type: string
1757
+ format: uuid
1758
+ maxMembers:
1759
+ type: integer
1760
+ status:
1761
+ type: string
1762
+ role:
1763
+ type: string
1764
+ enum: [owner, admin, member]
1765
+ description: Your role in this team
1766
+ balanceCents:
1767
+ type: integer
1768
+ description: Team wallet balance in cents
1769
+ createdAt:
1770
+ type: string
1771
+ format: date-time
1772
+
1773
+ TeamDetail:
1774
+ type: object
1775
+ properties:
1776
+ id:
1777
+ type: string
1778
+ format: uuid
1779
+ name:
1780
+ type: string
1781
+ ownerId:
1782
+ type: string
1783
+ format: uuid
1784
+ maxMembers:
1785
+ type: integer
1786
+ status:
1787
+ type: string
1788
+ role:
1789
+ type: string
1790
+ enum: [owner, admin, member]
1791
+ balanceCents:
1792
+ type: integer
1793
+ createdAt:
1794
+ type: string
1795
+ format: date-time
1796
+
1797
+ TeamWalletTransaction:
1798
+ type: object
1799
+ properties:
1800
+ id:
1801
+ type: string
1802
+ format: uuid
1803
+ walletId:
1804
+ type: string
1805
+ format: uuid
1806
+ type:
1807
+ type: string
1808
+ enum: [fund, usage_debit, refund]
1809
+ amountCents:
1810
+ type: integer
1811
+ description:
1812
+ type: string
1813
+ createdAt:
1814
+ type: string
1815
+ format: date-time
1816
+
1817
+ TeamMember:
1818
+ type: object
1819
+ properties:
1820
+ id:
1821
+ type: string
1822
+ format: uuid
1823
+ teamId:
1824
+ type: string
1825
+ format: uuid
1826
+ userId:
1827
+ type: string
1828
+ format: uuid
1829
+ role:
1830
+ type: string
1831
+ enum: [owner, admin, member]
1832
+ email:
1833
+ type: string
1834
+ format: email
1835
+ joinedAt:
1836
+ type: string
1837
+ format: date-time
1838
+
1839
+ responses:
1840
+ BadRequest:
1841
+ description: Invalid request parameters
1842
+ content:
1843
+ application/json:
1844
+ schema:
1845
+ $ref: "#/components/schemas/Error"
1846
+ RateLimited:
1847
+ description: Too many requests
1848
+ content:
1849
+ application/json:
1850
+ schema:
1851
+ $ref: "#/components/schemas/Error"