@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/LICENSE +21 -0
- package/README.md +175 -0
- package/ai-plugin.json +18 -0
- package/dist/handler.d.ts +86 -0
- package/dist/handler.d.ts.map +1 -0
- package/dist/handler.js +1915 -0
- package/dist/handler.js.map +1 -0
- package/functions.json +477 -0
- package/openapi.yaml +1851 -0
- package/package.json +44 -0
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"
|