@stridge/openapi 0.2.1 → 0.4.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/dist/openapi.dereferenced.json +1053 -219
- package/dist/openapi.json +182 -6
- package/dist/types.d.ts +597 -19
- package/package.json +1 -1
|
@@ -25,6 +25,10 @@
|
|
|
25
25
|
"name": "UDA",
|
|
26
26
|
"description": "Universal Deposit Addresses — allocate cross-chain deposit addresses, fetch indicative quotes, and track settlements.\n"
|
|
27
27
|
},
|
|
28
|
+
{
|
|
29
|
+
"name": "Routing Policies",
|
|
30
|
+
"description": "Tenant-scoped, centrally-editable routing policies — ordered, first-match-wins rule sets that divert UDA settlements. Editing a policy applies to every UDA that references it (or inherits the tenant default) with no per-UDA changes. Read-only over the API; create and edit them from the dashboard. Routing policies apply to UDA settlements only — gateway flows ignore them.\n"
|
|
31
|
+
},
|
|
28
32
|
{
|
|
29
33
|
"name": "Payout",
|
|
30
34
|
"description": "Non-custodial vaults and the payouts they fund. Inspect a vault's addresses, per-asset balances, and total value, then send funds from a vault to an external address — payouts are idempotent by reference, tracked through a lifecycle, and have native gas funded automatically.\n"
|
|
@@ -292,6 +296,11 @@
|
|
|
292
296
|
}
|
|
293
297
|
}
|
|
294
298
|
}
|
|
299
|
+
},
|
|
300
|
+
"routing_policy_id": {
|
|
301
|
+
"type": "string",
|
|
302
|
+
"description": "The routing policy attached to this UDA, when set. Omitted for legacy UDAs that inherit the tenant default policy.\n",
|
|
303
|
+
"example": "rpol_2f8c1a9d4e5f6071"
|
|
295
304
|
}
|
|
296
305
|
}
|
|
297
306
|
}
|
|
@@ -540,6 +549,11 @@
|
|
|
540
549
|
]
|
|
541
550
|
},
|
|
542
551
|
"description": "Optional; max 3. Specificity-wins precedence: a rule pinning both `source_network_id` and `source_asset_symbol` beats a network-only rule. When nothing matches, settlements use the default destination.\n"
|
|
552
|
+
},
|
|
553
|
+
"routing_policy_id": {
|
|
554
|
+
"type": "string",
|
|
555
|
+
"description": "Routing policy to attach to this UDA. Omit or send an empty string to attach the tenant's default policy. Per-UDA inline `routing_rules` still take precedence over the policy.\n",
|
|
556
|
+
"example": "rpol_2f8c1a9d4e5f6071"
|
|
543
557
|
}
|
|
544
558
|
},
|
|
545
559
|
"required": [
|
|
@@ -734,6 +748,11 @@
|
|
|
734
748
|
}
|
|
735
749
|
}
|
|
736
750
|
}
|
|
751
|
+
},
|
|
752
|
+
"routing_policy_id": {
|
|
753
|
+
"type": "string",
|
|
754
|
+
"description": "The routing policy attached to this UDA, when set. Omitted for legacy UDAs that inherit the tenant default policy.\n",
|
|
755
|
+
"example": "rpol_2f8c1a9d4e5f6071"
|
|
737
756
|
}
|
|
738
757
|
}
|
|
739
758
|
}
|
|
@@ -911,6 +930,11 @@
|
|
|
911
930
|
}
|
|
912
931
|
}
|
|
913
932
|
}
|
|
933
|
+
},
|
|
934
|
+
"routing_policy_id": {
|
|
935
|
+
"type": "string",
|
|
936
|
+
"description": "The routing policy attached to this UDA, when set. Omitted for legacy UDAs that inherit the tenant default policy.\n",
|
|
937
|
+
"example": "rpol_2f8c1a9d4e5f6071"
|
|
914
938
|
}
|
|
915
939
|
}
|
|
916
940
|
}
|
|
@@ -1332,13 +1356,15 @@
|
|
|
1332
1356
|
},
|
|
1333
1357
|
"eip155_id": {
|
|
1334
1358
|
"type": "integer",
|
|
1359
|
+
"description": "Chain-specific numeric id: the EIP-155 chain id for EVM networks, or the analogous numeric chain id Stridge uses for non-EVM (TVM, SVM) networks. Always present.\n",
|
|
1335
1360
|
"example": 1
|
|
1336
1361
|
},
|
|
1337
1362
|
"chain_type": {
|
|
1338
1363
|
"type": "string",
|
|
1339
1364
|
"enum": [
|
|
1340
1365
|
"EVM",
|
|
1341
|
-
"TVM"
|
|
1366
|
+
"TVM",
|
|
1367
|
+
"SVM"
|
|
1342
1368
|
],
|
|
1343
1369
|
"example": "EVM"
|
|
1344
1370
|
},
|
|
@@ -3452,6 +3478,15 @@
|
|
|
3452
3478
|
"type": "string",
|
|
3453
3479
|
"example": "Payment for order #12345"
|
|
3454
3480
|
},
|
|
3481
|
+
"type": {
|
|
3482
|
+
"type": "string",
|
|
3483
|
+
"enum": [
|
|
3484
|
+
"normal",
|
|
3485
|
+
"forceful"
|
|
3486
|
+
],
|
|
3487
|
+
"description": "Payout strategy the payout was created with.",
|
|
3488
|
+
"example": "normal"
|
|
3489
|
+
},
|
|
3455
3490
|
"status": {
|
|
3456
3491
|
"type": "string",
|
|
3457
3492
|
"enum": [
|
|
@@ -3486,7 +3521,7 @@
|
|
|
3486
3521
|
"expired_at": {
|
|
3487
3522
|
"type": "string",
|
|
3488
3523
|
"format": "date-time",
|
|
3489
|
-
"example": "2026-
|
|
3524
|
+
"example": "2026-01-01T01:00:00Z"
|
|
3490
3525
|
}
|
|
3491
3526
|
}
|
|
3492
3527
|
}
|
|
@@ -3637,7 +3672,7 @@
|
|
|
3637
3672
|
"Payout"
|
|
3638
3673
|
],
|
|
3639
3674
|
"summary": "Create payout",
|
|
3640
|
-
"description": "Create a payout from the tenant's vault wallet to an external address. Provide either `amount` (crypto) or `usd_amount` (converted to crypto at the current rate). Payouts are idempotent by `(vault_id, reference_id)` — resubmitting a `reference_id` returns `409` instead of paying twice
|
|
3675
|
+
"description": "Create a payout from the tenant's vault wallet to an external address. Provide either `amount` (crypto) or `usd_amount` (converted to crypto at the current rate). Payouts are idempotent by `(vault_id, reference_id)` — resubmitting a `reference_id` returns `409` instead of paying twice. Set `type` to `forceful` for a single fail-fast attempt — gas is still refilled when needed, but the refill and transfer are each tried once with no retry; the default `normal` refills and retries until `expired_at`.\n",
|
|
3641
3676
|
"security": [
|
|
3642
3677
|
{
|
|
3643
3678
|
"ApiKeyAuth": []
|
|
@@ -3692,11 +3727,20 @@
|
|
|
3692
3727
|
"description": "Free-form note stored on the payout.",
|
|
3693
3728
|
"example": "Payment for order #12345"
|
|
3694
3729
|
},
|
|
3730
|
+
"type": {
|
|
3731
|
+
"type": "string",
|
|
3732
|
+
"enum": [
|
|
3733
|
+
"normal",
|
|
3734
|
+
"forceful"
|
|
3735
|
+
],
|
|
3736
|
+
"default": "normal",
|
|
3737
|
+
"description": "Payout strategy. `normal` (default) refills gas when needed and retries until `expired_at`. `forceful` still refills when needed but is single-attempt — the refill and the transfer are each tried once, with no retry and no `expired_at`; it fails immediately if either can't complete.\n"
|
|
3738
|
+
},
|
|
3695
3739
|
"expired_at": {
|
|
3696
3740
|
"type": "string",
|
|
3697
3741
|
"format": "date-time",
|
|
3698
|
-
"description": "Cutoff after which a non-confirmed payout expires.",
|
|
3699
|
-
"example": "2026-
|
|
3742
|
+
"description": "Cutoff after which a non-confirmed payout expires. Defaults to 1 hour from creation; capped at 12 hours ahead. Ignored for `forceful` payouts.\n",
|
|
3743
|
+
"example": "2026-01-01T01:00:00Z"
|
|
3700
3744
|
}
|
|
3701
3745
|
},
|
|
3702
3746
|
"required": [
|
|
@@ -3714,7 +3758,8 @@
|
|
|
3714
3758
|
"reference_id": "order-12345",
|
|
3715
3759
|
"amount": "100.50",
|
|
3716
3760
|
"remark": "Payment for order #12345",
|
|
3717
|
-
"
|
|
3761
|
+
"type": "normal",
|
|
3762
|
+
"expired_at": "2026-01-01T01:00:00Z"
|
|
3718
3763
|
}
|
|
3719
3764
|
}
|
|
3720
3765
|
}
|
|
@@ -3774,6 +3819,15 @@
|
|
|
3774
3819
|
"type": "string",
|
|
3775
3820
|
"example": "Payment for order #12345"
|
|
3776
3821
|
},
|
|
3822
|
+
"type": {
|
|
3823
|
+
"type": "string",
|
|
3824
|
+
"enum": [
|
|
3825
|
+
"normal",
|
|
3826
|
+
"forceful"
|
|
3827
|
+
],
|
|
3828
|
+
"description": "Payout strategy the payout was created with.",
|
|
3829
|
+
"example": "normal"
|
|
3830
|
+
},
|
|
3777
3831
|
"status": {
|
|
3778
3832
|
"type": "string",
|
|
3779
3833
|
"enum": [
|
|
@@ -3808,7 +3862,7 @@
|
|
|
3808
3862
|
"expired_at": {
|
|
3809
3863
|
"type": "string",
|
|
3810
3864
|
"format": "date-time",
|
|
3811
|
-
"example": "2026-
|
|
3865
|
+
"example": "2026-01-01T01:00:00Z"
|
|
3812
3866
|
}
|
|
3813
3867
|
}
|
|
3814
3868
|
}
|
|
@@ -4091,6 +4145,15 @@
|
|
|
4091
4145
|
"type": "string",
|
|
4092
4146
|
"example": "Payment for order #12345"
|
|
4093
4147
|
},
|
|
4148
|
+
"type": {
|
|
4149
|
+
"type": "string",
|
|
4150
|
+
"enum": [
|
|
4151
|
+
"normal",
|
|
4152
|
+
"forceful"
|
|
4153
|
+
],
|
|
4154
|
+
"description": "Payout strategy the payout was created with.",
|
|
4155
|
+
"example": "normal"
|
|
4156
|
+
},
|
|
4094
4157
|
"status": {
|
|
4095
4158
|
"type": "string",
|
|
4096
4159
|
"enum": [
|
|
@@ -4125,7 +4188,7 @@
|
|
|
4125
4188
|
"expired_at": {
|
|
4126
4189
|
"type": "string",
|
|
4127
4190
|
"format": "date-time",
|
|
4128
|
-
"example": "2026-
|
|
4191
|
+
"example": "2026-01-01T01:00:00Z"
|
|
4129
4192
|
}
|
|
4130
4193
|
}
|
|
4131
4194
|
}
|
|
@@ -4349,6 +4412,15 @@
|
|
|
4349
4412
|
"type": "string",
|
|
4350
4413
|
"example": "Payment for order #12345"
|
|
4351
4414
|
},
|
|
4415
|
+
"type": {
|
|
4416
|
+
"type": "string",
|
|
4417
|
+
"enum": [
|
|
4418
|
+
"normal",
|
|
4419
|
+
"forceful"
|
|
4420
|
+
],
|
|
4421
|
+
"description": "Payout strategy the payout was created with.",
|
|
4422
|
+
"example": "normal"
|
|
4423
|
+
},
|
|
4352
4424
|
"status": {
|
|
4353
4425
|
"type": "string",
|
|
4354
4426
|
"enum": [
|
|
@@ -4383,7 +4455,7 @@
|
|
|
4383
4455
|
"expired_at": {
|
|
4384
4456
|
"type": "string",
|
|
4385
4457
|
"format": "date-time",
|
|
4386
|
-
"example": "2026-
|
|
4458
|
+
"example": "2026-01-01T01:00:00Z"
|
|
4387
4459
|
}
|
|
4388
4460
|
}
|
|
4389
4461
|
}
|
|
@@ -5489,215 +5561,717 @@
|
|
|
5489
5561
|
}
|
|
5490
5562
|
}
|
|
5491
5563
|
}
|
|
5492
|
-
}
|
|
5493
|
-
},
|
|
5494
|
-
"components": {
|
|
5495
|
-
"securitySchemes": {
|
|
5496
|
-
"ApiKeyAuth": {
|
|
5497
|
-
"type": "apiKey",
|
|
5498
|
-
"in": "header",
|
|
5499
|
-
"name": "X-API-Key",
|
|
5500
|
-
"description": "Secret API key for programmatic access. Send it on every authenticated request. Keep it server-side; never ship it in a client bundle.\n"
|
|
5501
|
-
}
|
|
5502
|
-
},
|
|
5503
|
-
"parameters": {
|
|
5504
|
-
"LimitParam": {
|
|
5505
|
-
"name": "limit",
|
|
5506
|
-
"in": "query",
|
|
5507
|
-
"description": "Page size (default 50, max 200).",
|
|
5508
|
-
"schema": {
|
|
5509
|
-
"type": "integer",
|
|
5510
|
-
"default": 50,
|
|
5511
|
-
"minimum": 1,
|
|
5512
|
-
"maximum": 200
|
|
5513
|
-
}
|
|
5514
|
-
},
|
|
5515
|
-
"OffsetParam": {
|
|
5516
|
-
"name": "offset",
|
|
5517
|
-
"in": "query",
|
|
5518
|
-
"description": "Number of items to skip (default 0).",
|
|
5519
|
-
"schema": {
|
|
5520
|
-
"type": "integer",
|
|
5521
|
-
"default": 0,
|
|
5522
|
-
"minimum": 0
|
|
5523
|
-
}
|
|
5524
|
-
},
|
|
5525
|
-
"VaultIdParam": {
|
|
5526
|
-
"name": "vault_id",
|
|
5527
|
-
"in": "path",
|
|
5528
|
-
"required": true,
|
|
5529
|
-
"description": "Vault id.",
|
|
5530
|
-
"schema": {
|
|
5531
|
-
"type": "string"
|
|
5532
|
-
}
|
|
5533
|
-
},
|
|
5534
|
-
"PageParam": {
|
|
5535
|
-
"name": "page",
|
|
5536
|
-
"in": "query",
|
|
5537
|
-
"description": "Page number (default 1).",
|
|
5538
|
-
"schema": {
|
|
5539
|
-
"type": "integer",
|
|
5540
|
-
"default": 1,
|
|
5541
|
-
"minimum": 1
|
|
5542
|
-
}
|
|
5543
|
-
},
|
|
5544
|
-
"PageSizeParam": {
|
|
5545
|
-
"name": "limit",
|
|
5546
|
-
"in": "query",
|
|
5547
|
-
"description": "Items per page (default 20, max 100).",
|
|
5548
|
-
"schema": {
|
|
5549
|
-
"type": "integer",
|
|
5550
|
-
"default": 20,
|
|
5551
|
-
"minimum": 1,
|
|
5552
|
-
"maximum": 100
|
|
5553
|
-
}
|
|
5554
|
-
}
|
|
5555
5564
|
},
|
|
5556
|
-
"
|
|
5557
|
-
"
|
|
5558
|
-
"
|
|
5559
|
-
"
|
|
5560
|
-
"
|
|
5561
|
-
|
|
5562
|
-
|
|
5563
|
-
|
|
5564
|
-
|
|
5565
|
-
|
|
5566
|
-
|
|
5567
|
-
"example": false
|
|
5568
|
-
},
|
|
5569
|
-
"code": {
|
|
5570
|
-
"type": "integer",
|
|
5571
|
-
"description": "HTTP status code echoed in the body.",
|
|
5572
|
-
"example": 400
|
|
5573
|
-
},
|
|
5574
|
-
"error": {
|
|
5575
|
-
"type": "string",
|
|
5576
|
-
"description": "Human-readable error message.",
|
|
5577
|
-
"example": "invalid request"
|
|
5578
|
-
}
|
|
5579
|
-
},
|
|
5580
|
-
"required": [
|
|
5581
|
-
"success",
|
|
5582
|
-
"error"
|
|
5583
|
-
]
|
|
5584
|
-
},
|
|
5585
|
-
"example": {
|
|
5586
|
-
"success": false,
|
|
5587
|
-
"code": 400,
|
|
5588
|
-
"error": "invalid request"
|
|
5589
|
-
}
|
|
5590
|
-
}
|
|
5591
|
-
}
|
|
5592
|
-
},
|
|
5593
|
-
"Unauthorized": {
|
|
5594
|
-
"description": "The `X-API-Key` header is missing or invalid.",
|
|
5595
|
-
"content": {
|
|
5596
|
-
"application/json": {
|
|
5597
|
-
"schema": {
|
|
5598
|
-
"type": "object",
|
|
5599
|
-
"description": "Canonical error envelope returned by every endpoint on failure.",
|
|
5600
|
-
"properties": {
|
|
5601
|
-
"success": {
|
|
5602
|
-
"type": "boolean",
|
|
5603
|
-
"example": false
|
|
5604
|
-
},
|
|
5605
|
-
"code": {
|
|
5606
|
-
"type": "integer",
|
|
5607
|
-
"description": "HTTP status code echoed in the body.",
|
|
5608
|
-
"example": 400
|
|
5609
|
-
},
|
|
5610
|
-
"error": {
|
|
5611
|
-
"type": "string",
|
|
5612
|
-
"description": "Human-readable error message.",
|
|
5613
|
-
"example": "invalid request"
|
|
5614
|
-
}
|
|
5615
|
-
},
|
|
5616
|
-
"required": [
|
|
5617
|
-
"success",
|
|
5618
|
-
"error"
|
|
5619
|
-
]
|
|
5620
|
-
},
|
|
5621
|
-
"example": {
|
|
5622
|
-
"success": false,
|
|
5623
|
-
"code": 401,
|
|
5624
|
-
"error": "unauthenticated"
|
|
5625
|
-
}
|
|
5565
|
+
"/routing-policies": {
|
|
5566
|
+
"get": {
|
|
5567
|
+
"operationId": "list-routing-policies",
|
|
5568
|
+
"tags": [
|
|
5569
|
+
"Routing Policies"
|
|
5570
|
+
],
|
|
5571
|
+
"summary": "List routing policies",
|
|
5572
|
+
"description": "List the routing policies configured for your tenant, including the default policy. Read-only — create and edit policies from the dashboard.\n",
|
|
5573
|
+
"security": [
|
|
5574
|
+
{
|
|
5575
|
+
"ApiKeyAuth": []
|
|
5626
5576
|
}
|
|
5627
|
-
|
|
5628
|
-
|
|
5629
|
-
|
|
5630
|
-
|
|
5631
|
-
|
|
5632
|
-
|
|
5577
|
+
],
|
|
5578
|
+
"parameters": [
|
|
5579
|
+
{
|
|
5580
|
+
"name": "limit",
|
|
5581
|
+
"in": "query",
|
|
5582
|
+
"description": "Page size (default 50, max 200).",
|
|
5633
5583
|
"schema": {
|
|
5634
|
-
"type": "
|
|
5635
|
-
"
|
|
5636
|
-
"
|
|
5637
|
-
|
|
5638
|
-
"type": "boolean",
|
|
5639
|
-
"example": false
|
|
5640
|
-
},
|
|
5641
|
-
"code": {
|
|
5642
|
-
"type": "integer",
|
|
5643
|
-
"description": "HTTP status code echoed in the body.",
|
|
5644
|
-
"example": 400
|
|
5645
|
-
},
|
|
5646
|
-
"error": {
|
|
5647
|
-
"type": "string",
|
|
5648
|
-
"description": "Human-readable error message.",
|
|
5649
|
-
"example": "invalid request"
|
|
5650
|
-
}
|
|
5651
|
-
},
|
|
5652
|
-
"required": [
|
|
5653
|
-
"success",
|
|
5654
|
-
"error"
|
|
5655
|
-
]
|
|
5656
|
-
},
|
|
5657
|
-
"example": {
|
|
5658
|
-
"success": false,
|
|
5659
|
-
"code": 404,
|
|
5660
|
-
"error": "not found"
|
|
5584
|
+
"type": "integer",
|
|
5585
|
+
"default": 50,
|
|
5586
|
+
"minimum": 1,
|
|
5587
|
+
"maximum": 200
|
|
5661
5588
|
}
|
|
5662
|
-
}
|
|
5663
|
-
|
|
5664
|
-
|
|
5665
|
-
|
|
5666
|
-
|
|
5667
|
-
"content": {
|
|
5668
|
-
"application/json": {
|
|
5589
|
+
},
|
|
5590
|
+
{
|
|
5591
|
+
"name": "offset",
|
|
5592
|
+
"in": "query",
|
|
5593
|
+
"description": "Number of items to skip (default 0).",
|
|
5669
5594
|
"schema": {
|
|
5670
|
-
"type": "
|
|
5671
|
-
"
|
|
5672
|
-
"
|
|
5673
|
-
"success": {
|
|
5674
|
-
"type": "boolean",
|
|
5675
|
-
"example": false
|
|
5676
|
-
},
|
|
5677
|
-
"code": {
|
|
5678
|
-
"type": "integer",
|
|
5679
|
-
"description": "HTTP status code echoed in the body.",
|
|
5680
|
-
"example": 400
|
|
5681
|
-
},
|
|
5682
|
-
"error": {
|
|
5683
|
-
"type": "string",
|
|
5684
|
-
"description": "Human-readable error message.",
|
|
5685
|
-
"example": "invalid request"
|
|
5686
|
-
}
|
|
5687
|
-
},
|
|
5688
|
-
"required": [
|
|
5689
|
-
"success",
|
|
5690
|
-
"error"
|
|
5691
|
-
]
|
|
5692
|
-
},
|
|
5693
|
-
"example": {
|
|
5694
|
-
"success": false,
|
|
5695
|
-
"code": 500,
|
|
5696
|
-
"error": "internal server error"
|
|
5595
|
+
"type": "integer",
|
|
5596
|
+
"default": 0,
|
|
5597
|
+
"minimum": 0
|
|
5697
5598
|
}
|
|
5698
5599
|
}
|
|
5699
|
-
|
|
5700
|
-
|
|
5600
|
+
],
|
|
5601
|
+
"responses": {
|
|
5602
|
+
"200": {
|
|
5603
|
+
"description": "A page of routing policies.",
|
|
5604
|
+
"content": {
|
|
5605
|
+
"application/json": {
|
|
5606
|
+
"schema": {
|
|
5607
|
+
"type": "object",
|
|
5608
|
+
"properties": {
|
|
5609
|
+
"data": {
|
|
5610
|
+
"type": "array",
|
|
5611
|
+
"items": {
|
|
5612
|
+
"type": "object",
|
|
5613
|
+
"description": "A tenant-scoped, ordered routing-policy. Rules are evaluated first-match-wins; an empty rule set falls through to the UDA's default destination.\n",
|
|
5614
|
+
"properties": {
|
|
5615
|
+
"id": {
|
|
5616
|
+
"type": "string",
|
|
5617
|
+
"example": "rpol_2f8c1a9d4e5f6071"
|
|
5618
|
+
},
|
|
5619
|
+
"name": {
|
|
5620
|
+
"type": "string",
|
|
5621
|
+
"example": "vip_tier"
|
|
5622
|
+
},
|
|
5623
|
+
"is_default": {
|
|
5624
|
+
"type": "boolean",
|
|
5625
|
+
"description": "Whether this is the tenant's default policy (one per tenant).",
|
|
5626
|
+
"example": false
|
|
5627
|
+
},
|
|
5628
|
+
"rules": {
|
|
5629
|
+
"type": "array",
|
|
5630
|
+
"description": "Ordered, first-match-wins routing rules (dual form).",
|
|
5631
|
+
"items": {
|
|
5632
|
+
"type": "object",
|
|
5633
|
+
"description": "An echoed routing rule in dual form (symbol plus resolved contract address).",
|
|
5634
|
+
"properties": {
|
|
5635
|
+
"match": {
|
|
5636
|
+
"type": "object",
|
|
5637
|
+
"properties": {
|
|
5638
|
+
"source_network_id": {
|
|
5639
|
+
"type": "string",
|
|
5640
|
+
"example": "60"
|
|
5641
|
+
},
|
|
5642
|
+
"source_asset_symbol": {
|
|
5643
|
+
"type": "string",
|
|
5644
|
+
"example": "USDT"
|
|
5645
|
+
},
|
|
5646
|
+
"source_token_address": {
|
|
5647
|
+
"type": "string",
|
|
5648
|
+
"example": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
|
|
5649
|
+
}
|
|
5650
|
+
}
|
|
5651
|
+
},
|
|
5652
|
+
"destination": {
|
|
5653
|
+
"type": "object",
|
|
5654
|
+
"properties": {
|
|
5655
|
+
"address": {
|
|
5656
|
+
"type": "string",
|
|
5657
|
+
"example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
|
|
5658
|
+
},
|
|
5659
|
+
"network_id": {
|
|
5660
|
+
"type": "string",
|
|
5661
|
+
"example": "60"
|
|
5662
|
+
},
|
|
5663
|
+
"eip155_id": {
|
|
5664
|
+
"type": "string",
|
|
5665
|
+
"example": "1"
|
|
5666
|
+
},
|
|
5667
|
+
"network_name": {
|
|
5668
|
+
"type": "string",
|
|
5669
|
+
"example": "Ethereum"
|
|
5670
|
+
},
|
|
5671
|
+
"asset_symbol": {
|
|
5672
|
+
"type": "string",
|
|
5673
|
+
"example": "USDC"
|
|
5674
|
+
},
|
|
5675
|
+
"asset_address": {
|
|
5676
|
+
"type": "string",
|
|
5677
|
+
"example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
|
|
5678
|
+
},
|
|
5679
|
+
"asset_decimals": {
|
|
5680
|
+
"type": "integer",
|
|
5681
|
+
"example": 6
|
|
5682
|
+
}
|
|
5683
|
+
}
|
|
5684
|
+
}
|
|
5685
|
+
}
|
|
5686
|
+
}
|
|
5687
|
+
},
|
|
5688
|
+
"created_at": {
|
|
5689
|
+
"type": "string",
|
|
5690
|
+
"format": "date-time",
|
|
5691
|
+
"example": "2026-05-20T14:03:12Z"
|
|
5692
|
+
},
|
|
5693
|
+
"updated_at": {
|
|
5694
|
+
"type": "string",
|
|
5695
|
+
"format": "date-time",
|
|
5696
|
+
"example": "2026-05-20T14:03:12Z"
|
|
5697
|
+
}
|
|
5698
|
+
}
|
|
5699
|
+
}
|
|
5700
|
+
},
|
|
5701
|
+
"pagination": {
|
|
5702
|
+
"type": "object",
|
|
5703
|
+
"properties": {
|
|
5704
|
+
"count": {
|
|
5705
|
+
"type": "integer",
|
|
5706
|
+
"description": "Number of items in this page.",
|
|
5707
|
+
"example": 20
|
|
5708
|
+
},
|
|
5709
|
+
"limit": {
|
|
5710
|
+
"type": "integer",
|
|
5711
|
+
"example": 50
|
|
5712
|
+
},
|
|
5713
|
+
"offset": {
|
|
5714
|
+
"type": "integer",
|
|
5715
|
+
"example": 0
|
|
5716
|
+
}
|
|
5717
|
+
}
|
|
5718
|
+
}
|
|
5719
|
+
}
|
|
5720
|
+
}
|
|
5721
|
+
}
|
|
5722
|
+
}
|
|
5723
|
+
},
|
|
5724
|
+
"400": {
|
|
5725
|
+
"description": "The request was malformed or failed validation.",
|
|
5726
|
+
"content": {
|
|
5727
|
+
"application/json": {
|
|
5728
|
+
"schema": {
|
|
5729
|
+
"type": "object",
|
|
5730
|
+
"description": "Canonical error envelope returned by every endpoint on failure.",
|
|
5731
|
+
"properties": {
|
|
5732
|
+
"success": {
|
|
5733
|
+
"type": "boolean",
|
|
5734
|
+
"example": false
|
|
5735
|
+
},
|
|
5736
|
+
"code": {
|
|
5737
|
+
"type": "integer",
|
|
5738
|
+
"description": "HTTP status code echoed in the body.",
|
|
5739
|
+
"example": 400
|
|
5740
|
+
},
|
|
5741
|
+
"error": {
|
|
5742
|
+
"type": "string",
|
|
5743
|
+
"description": "Human-readable error message.",
|
|
5744
|
+
"example": "invalid request"
|
|
5745
|
+
}
|
|
5746
|
+
},
|
|
5747
|
+
"required": [
|
|
5748
|
+
"success",
|
|
5749
|
+
"error"
|
|
5750
|
+
]
|
|
5751
|
+
},
|
|
5752
|
+
"example": {
|
|
5753
|
+
"success": false,
|
|
5754
|
+
"code": 400,
|
|
5755
|
+
"error": "invalid request"
|
|
5756
|
+
}
|
|
5757
|
+
}
|
|
5758
|
+
}
|
|
5759
|
+
},
|
|
5760
|
+
"401": {
|
|
5761
|
+
"description": "The `X-API-Key` header is missing or invalid.",
|
|
5762
|
+
"content": {
|
|
5763
|
+
"application/json": {
|
|
5764
|
+
"schema": {
|
|
5765
|
+
"type": "object",
|
|
5766
|
+
"description": "Canonical error envelope returned by every endpoint on failure.",
|
|
5767
|
+
"properties": {
|
|
5768
|
+
"success": {
|
|
5769
|
+
"type": "boolean",
|
|
5770
|
+
"example": false
|
|
5771
|
+
},
|
|
5772
|
+
"code": {
|
|
5773
|
+
"type": "integer",
|
|
5774
|
+
"description": "HTTP status code echoed in the body.",
|
|
5775
|
+
"example": 400
|
|
5776
|
+
},
|
|
5777
|
+
"error": {
|
|
5778
|
+
"type": "string",
|
|
5779
|
+
"description": "Human-readable error message.",
|
|
5780
|
+
"example": "invalid request"
|
|
5781
|
+
}
|
|
5782
|
+
},
|
|
5783
|
+
"required": [
|
|
5784
|
+
"success",
|
|
5785
|
+
"error"
|
|
5786
|
+
]
|
|
5787
|
+
},
|
|
5788
|
+
"example": {
|
|
5789
|
+
"success": false,
|
|
5790
|
+
"code": 401,
|
|
5791
|
+
"error": "unauthenticated"
|
|
5792
|
+
}
|
|
5793
|
+
}
|
|
5794
|
+
}
|
|
5795
|
+
},
|
|
5796
|
+
"500": {
|
|
5797
|
+
"description": "An unexpected error occurred on the server.",
|
|
5798
|
+
"content": {
|
|
5799
|
+
"application/json": {
|
|
5800
|
+
"schema": {
|
|
5801
|
+
"type": "object",
|
|
5802
|
+
"description": "Canonical error envelope returned by every endpoint on failure.",
|
|
5803
|
+
"properties": {
|
|
5804
|
+
"success": {
|
|
5805
|
+
"type": "boolean",
|
|
5806
|
+
"example": false
|
|
5807
|
+
},
|
|
5808
|
+
"code": {
|
|
5809
|
+
"type": "integer",
|
|
5810
|
+
"description": "HTTP status code echoed in the body.",
|
|
5811
|
+
"example": 400
|
|
5812
|
+
},
|
|
5813
|
+
"error": {
|
|
5814
|
+
"type": "string",
|
|
5815
|
+
"description": "Human-readable error message.",
|
|
5816
|
+
"example": "invalid request"
|
|
5817
|
+
}
|
|
5818
|
+
},
|
|
5819
|
+
"required": [
|
|
5820
|
+
"success",
|
|
5821
|
+
"error"
|
|
5822
|
+
]
|
|
5823
|
+
},
|
|
5824
|
+
"example": {
|
|
5825
|
+
"success": false,
|
|
5826
|
+
"code": 500,
|
|
5827
|
+
"error": "internal server error"
|
|
5828
|
+
}
|
|
5829
|
+
}
|
|
5830
|
+
}
|
|
5831
|
+
}
|
|
5832
|
+
}
|
|
5833
|
+
}
|
|
5834
|
+
},
|
|
5835
|
+
"/routing-policies/{id}": {
|
|
5836
|
+
"get": {
|
|
5837
|
+
"operationId": "get-routing-policy",
|
|
5838
|
+
"tags": [
|
|
5839
|
+
"Routing Policies"
|
|
5840
|
+
],
|
|
5841
|
+
"summary": "Get a routing policy",
|
|
5842
|
+
"description": "Fetch a single routing policy by id.",
|
|
5843
|
+
"security": [
|
|
5844
|
+
{
|
|
5845
|
+
"ApiKeyAuth": []
|
|
5846
|
+
}
|
|
5847
|
+
],
|
|
5848
|
+
"parameters": [
|
|
5849
|
+
{
|
|
5850
|
+
"name": "id",
|
|
5851
|
+
"in": "path",
|
|
5852
|
+
"required": true,
|
|
5853
|
+
"description": "Routing policy id.",
|
|
5854
|
+
"schema": {
|
|
5855
|
+
"type": "string"
|
|
5856
|
+
}
|
|
5857
|
+
}
|
|
5858
|
+
],
|
|
5859
|
+
"responses": {
|
|
5860
|
+
"200": {
|
|
5861
|
+
"description": "The routing policy.",
|
|
5862
|
+
"content": {
|
|
5863
|
+
"application/json": {
|
|
5864
|
+
"schema": {
|
|
5865
|
+
"type": "object",
|
|
5866
|
+
"description": "A tenant-scoped, ordered routing-policy. Rules are evaluated first-match-wins; an empty rule set falls through to the UDA's default destination.\n",
|
|
5867
|
+
"properties": {
|
|
5868
|
+
"id": {
|
|
5869
|
+
"type": "string",
|
|
5870
|
+
"example": "rpol_2f8c1a9d4e5f6071"
|
|
5871
|
+
},
|
|
5872
|
+
"name": {
|
|
5873
|
+
"type": "string",
|
|
5874
|
+
"example": "vip_tier"
|
|
5875
|
+
},
|
|
5876
|
+
"is_default": {
|
|
5877
|
+
"type": "boolean",
|
|
5878
|
+
"description": "Whether this is the tenant's default policy (one per tenant).",
|
|
5879
|
+
"example": false
|
|
5880
|
+
},
|
|
5881
|
+
"rules": {
|
|
5882
|
+
"type": "array",
|
|
5883
|
+
"description": "Ordered, first-match-wins routing rules (dual form).",
|
|
5884
|
+
"items": {
|
|
5885
|
+
"type": "object",
|
|
5886
|
+
"description": "An echoed routing rule in dual form (symbol plus resolved contract address).",
|
|
5887
|
+
"properties": {
|
|
5888
|
+
"match": {
|
|
5889
|
+
"type": "object",
|
|
5890
|
+
"properties": {
|
|
5891
|
+
"source_network_id": {
|
|
5892
|
+
"type": "string",
|
|
5893
|
+
"example": "60"
|
|
5894
|
+
},
|
|
5895
|
+
"source_asset_symbol": {
|
|
5896
|
+
"type": "string",
|
|
5897
|
+
"example": "USDT"
|
|
5898
|
+
},
|
|
5899
|
+
"source_token_address": {
|
|
5900
|
+
"type": "string",
|
|
5901
|
+
"example": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
|
|
5902
|
+
}
|
|
5903
|
+
}
|
|
5904
|
+
},
|
|
5905
|
+
"destination": {
|
|
5906
|
+
"type": "object",
|
|
5907
|
+
"properties": {
|
|
5908
|
+
"address": {
|
|
5909
|
+
"type": "string",
|
|
5910
|
+
"example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
|
|
5911
|
+
},
|
|
5912
|
+
"network_id": {
|
|
5913
|
+
"type": "string",
|
|
5914
|
+
"example": "60"
|
|
5915
|
+
},
|
|
5916
|
+
"eip155_id": {
|
|
5917
|
+
"type": "string",
|
|
5918
|
+
"example": "1"
|
|
5919
|
+
},
|
|
5920
|
+
"network_name": {
|
|
5921
|
+
"type": "string",
|
|
5922
|
+
"example": "Ethereum"
|
|
5923
|
+
},
|
|
5924
|
+
"asset_symbol": {
|
|
5925
|
+
"type": "string",
|
|
5926
|
+
"example": "USDC"
|
|
5927
|
+
},
|
|
5928
|
+
"asset_address": {
|
|
5929
|
+
"type": "string",
|
|
5930
|
+
"example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
|
|
5931
|
+
},
|
|
5932
|
+
"asset_decimals": {
|
|
5933
|
+
"type": "integer",
|
|
5934
|
+
"example": 6
|
|
5935
|
+
}
|
|
5936
|
+
}
|
|
5937
|
+
}
|
|
5938
|
+
}
|
|
5939
|
+
}
|
|
5940
|
+
},
|
|
5941
|
+
"created_at": {
|
|
5942
|
+
"type": "string",
|
|
5943
|
+
"format": "date-time",
|
|
5944
|
+
"example": "2026-05-20T14:03:12Z"
|
|
5945
|
+
},
|
|
5946
|
+
"updated_at": {
|
|
5947
|
+
"type": "string",
|
|
5948
|
+
"format": "date-time",
|
|
5949
|
+
"example": "2026-05-20T14:03:12Z"
|
|
5950
|
+
}
|
|
5951
|
+
}
|
|
5952
|
+
}
|
|
5953
|
+
}
|
|
5954
|
+
}
|
|
5955
|
+
},
|
|
5956
|
+
"401": {
|
|
5957
|
+
"description": "The `X-API-Key` header is missing or invalid.",
|
|
5958
|
+
"content": {
|
|
5959
|
+
"application/json": {
|
|
5960
|
+
"schema": {
|
|
5961
|
+
"type": "object",
|
|
5962
|
+
"description": "Canonical error envelope returned by every endpoint on failure.",
|
|
5963
|
+
"properties": {
|
|
5964
|
+
"success": {
|
|
5965
|
+
"type": "boolean",
|
|
5966
|
+
"example": false
|
|
5967
|
+
},
|
|
5968
|
+
"code": {
|
|
5969
|
+
"type": "integer",
|
|
5970
|
+
"description": "HTTP status code echoed in the body.",
|
|
5971
|
+
"example": 400
|
|
5972
|
+
},
|
|
5973
|
+
"error": {
|
|
5974
|
+
"type": "string",
|
|
5975
|
+
"description": "Human-readable error message.",
|
|
5976
|
+
"example": "invalid request"
|
|
5977
|
+
}
|
|
5978
|
+
},
|
|
5979
|
+
"required": [
|
|
5980
|
+
"success",
|
|
5981
|
+
"error"
|
|
5982
|
+
]
|
|
5983
|
+
},
|
|
5984
|
+
"example": {
|
|
5985
|
+
"success": false,
|
|
5986
|
+
"code": 401,
|
|
5987
|
+
"error": "unauthenticated"
|
|
5988
|
+
}
|
|
5989
|
+
}
|
|
5990
|
+
}
|
|
5991
|
+
},
|
|
5992
|
+
"404": {
|
|
5993
|
+
"description": "The requested resource does not exist.",
|
|
5994
|
+
"content": {
|
|
5995
|
+
"application/json": {
|
|
5996
|
+
"schema": {
|
|
5997
|
+
"type": "object",
|
|
5998
|
+
"description": "Canonical error envelope returned by every endpoint on failure.",
|
|
5999
|
+
"properties": {
|
|
6000
|
+
"success": {
|
|
6001
|
+
"type": "boolean",
|
|
6002
|
+
"example": false
|
|
6003
|
+
},
|
|
6004
|
+
"code": {
|
|
6005
|
+
"type": "integer",
|
|
6006
|
+
"description": "HTTP status code echoed in the body.",
|
|
6007
|
+
"example": 400
|
|
6008
|
+
},
|
|
6009
|
+
"error": {
|
|
6010
|
+
"type": "string",
|
|
6011
|
+
"description": "Human-readable error message.",
|
|
6012
|
+
"example": "invalid request"
|
|
6013
|
+
}
|
|
6014
|
+
},
|
|
6015
|
+
"required": [
|
|
6016
|
+
"success",
|
|
6017
|
+
"error"
|
|
6018
|
+
]
|
|
6019
|
+
},
|
|
6020
|
+
"example": {
|
|
6021
|
+
"success": false,
|
|
6022
|
+
"code": 404,
|
|
6023
|
+
"error": "not found"
|
|
6024
|
+
}
|
|
6025
|
+
}
|
|
6026
|
+
}
|
|
6027
|
+
},
|
|
6028
|
+
"500": {
|
|
6029
|
+
"description": "An unexpected error occurred on the server.",
|
|
6030
|
+
"content": {
|
|
6031
|
+
"application/json": {
|
|
6032
|
+
"schema": {
|
|
6033
|
+
"type": "object",
|
|
6034
|
+
"description": "Canonical error envelope returned by every endpoint on failure.",
|
|
6035
|
+
"properties": {
|
|
6036
|
+
"success": {
|
|
6037
|
+
"type": "boolean",
|
|
6038
|
+
"example": false
|
|
6039
|
+
},
|
|
6040
|
+
"code": {
|
|
6041
|
+
"type": "integer",
|
|
6042
|
+
"description": "HTTP status code echoed in the body.",
|
|
6043
|
+
"example": 400
|
|
6044
|
+
},
|
|
6045
|
+
"error": {
|
|
6046
|
+
"type": "string",
|
|
6047
|
+
"description": "Human-readable error message.",
|
|
6048
|
+
"example": "invalid request"
|
|
6049
|
+
}
|
|
6050
|
+
},
|
|
6051
|
+
"required": [
|
|
6052
|
+
"success",
|
|
6053
|
+
"error"
|
|
6054
|
+
]
|
|
6055
|
+
},
|
|
6056
|
+
"example": {
|
|
6057
|
+
"success": false,
|
|
6058
|
+
"code": 500,
|
|
6059
|
+
"error": "internal server error"
|
|
6060
|
+
}
|
|
6061
|
+
}
|
|
6062
|
+
}
|
|
6063
|
+
}
|
|
6064
|
+
}
|
|
6065
|
+
}
|
|
6066
|
+
}
|
|
6067
|
+
},
|
|
6068
|
+
"components": {
|
|
6069
|
+
"securitySchemes": {
|
|
6070
|
+
"ApiKeyAuth": {
|
|
6071
|
+
"type": "apiKey",
|
|
6072
|
+
"in": "header",
|
|
6073
|
+
"name": "X-API-Key",
|
|
6074
|
+
"description": "Secret API key for programmatic access. Send it on every authenticated request. Keep it server-side; never ship it in a client bundle.\n"
|
|
6075
|
+
}
|
|
6076
|
+
},
|
|
6077
|
+
"parameters": {
|
|
6078
|
+
"LimitParam": {
|
|
6079
|
+
"name": "limit",
|
|
6080
|
+
"in": "query",
|
|
6081
|
+
"description": "Page size (default 50, max 200).",
|
|
6082
|
+
"schema": {
|
|
6083
|
+
"type": "integer",
|
|
6084
|
+
"default": 50,
|
|
6085
|
+
"minimum": 1,
|
|
6086
|
+
"maximum": 200
|
|
6087
|
+
}
|
|
6088
|
+
},
|
|
6089
|
+
"OffsetParam": {
|
|
6090
|
+
"name": "offset",
|
|
6091
|
+
"in": "query",
|
|
6092
|
+
"description": "Number of items to skip (default 0).",
|
|
6093
|
+
"schema": {
|
|
6094
|
+
"type": "integer",
|
|
6095
|
+
"default": 0,
|
|
6096
|
+
"minimum": 0
|
|
6097
|
+
}
|
|
6098
|
+
},
|
|
6099
|
+
"VaultIdParam": {
|
|
6100
|
+
"name": "vault_id",
|
|
6101
|
+
"in": "path",
|
|
6102
|
+
"required": true,
|
|
6103
|
+
"description": "Vault id.",
|
|
6104
|
+
"schema": {
|
|
6105
|
+
"type": "string"
|
|
6106
|
+
}
|
|
6107
|
+
},
|
|
6108
|
+
"PageParam": {
|
|
6109
|
+
"name": "page",
|
|
6110
|
+
"in": "query",
|
|
6111
|
+
"description": "Page number (default 1).",
|
|
6112
|
+
"schema": {
|
|
6113
|
+
"type": "integer",
|
|
6114
|
+
"default": 1,
|
|
6115
|
+
"minimum": 1
|
|
6116
|
+
}
|
|
6117
|
+
},
|
|
6118
|
+
"PageSizeParam": {
|
|
6119
|
+
"name": "limit",
|
|
6120
|
+
"in": "query",
|
|
6121
|
+
"description": "Items per page (default 20, max 100).",
|
|
6122
|
+
"schema": {
|
|
6123
|
+
"type": "integer",
|
|
6124
|
+
"default": 20,
|
|
6125
|
+
"minimum": 1,
|
|
6126
|
+
"maximum": 100
|
|
6127
|
+
}
|
|
6128
|
+
}
|
|
6129
|
+
},
|
|
6130
|
+
"responses": {
|
|
6131
|
+
"BadRequest": {
|
|
6132
|
+
"description": "The request was malformed or failed validation.",
|
|
6133
|
+
"content": {
|
|
6134
|
+
"application/json": {
|
|
6135
|
+
"schema": {
|
|
6136
|
+
"type": "object",
|
|
6137
|
+
"description": "Canonical error envelope returned by every endpoint on failure.",
|
|
6138
|
+
"properties": {
|
|
6139
|
+
"success": {
|
|
6140
|
+
"type": "boolean",
|
|
6141
|
+
"example": false
|
|
6142
|
+
},
|
|
6143
|
+
"code": {
|
|
6144
|
+
"type": "integer",
|
|
6145
|
+
"description": "HTTP status code echoed in the body.",
|
|
6146
|
+
"example": 400
|
|
6147
|
+
},
|
|
6148
|
+
"error": {
|
|
6149
|
+
"type": "string",
|
|
6150
|
+
"description": "Human-readable error message.",
|
|
6151
|
+
"example": "invalid request"
|
|
6152
|
+
}
|
|
6153
|
+
},
|
|
6154
|
+
"required": [
|
|
6155
|
+
"success",
|
|
6156
|
+
"error"
|
|
6157
|
+
]
|
|
6158
|
+
},
|
|
6159
|
+
"example": {
|
|
6160
|
+
"success": false,
|
|
6161
|
+
"code": 400,
|
|
6162
|
+
"error": "invalid request"
|
|
6163
|
+
}
|
|
6164
|
+
}
|
|
6165
|
+
}
|
|
6166
|
+
},
|
|
6167
|
+
"Unauthorized": {
|
|
6168
|
+
"description": "The `X-API-Key` header is missing or invalid.",
|
|
6169
|
+
"content": {
|
|
6170
|
+
"application/json": {
|
|
6171
|
+
"schema": {
|
|
6172
|
+
"type": "object",
|
|
6173
|
+
"description": "Canonical error envelope returned by every endpoint on failure.",
|
|
6174
|
+
"properties": {
|
|
6175
|
+
"success": {
|
|
6176
|
+
"type": "boolean",
|
|
6177
|
+
"example": false
|
|
6178
|
+
},
|
|
6179
|
+
"code": {
|
|
6180
|
+
"type": "integer",
|
|
6181
|
+
"description": "HTTP status code echoed in the body.",
|
|
6182
|
+
"example": 400
|
|
6183
|
+
},
|
|
6184
|
+
"error": {
|
|
6185
|
+
"type": "string",
|
|
6186
|
+
"description": "Human-readable error message.",
|
|
6187
|
+
"example": "invalid request"
|
|
6188
|
+
}
|
|
6189
|
+
},
|
|
6190
|
+
"required": [
|
|
6191
|
+
"success",
|
|
6192
|
+
"error"
|
|
6193
|
+
]
|
|
6194
|
+
},
|
|
6195
|
+
"example": {
|
|
6196
|
+
"success": false,
|
|
6197
|
+
"code": 401,
|
|
6198
|
+
"error": "unauthenticated"
|
|
6199
|
+
}
|
|
6200
|
+
}
|
|
6201
|
+
}
|
|
6202
|
+
},
|
|
6203
|
+
"NotFound": {
|
|
6204
|
+
"description": "The requested resource does not exist.",
|
|
6205
|
+
"content": {
|
|
6206
|
+
"application/json": {
|
|
6207
|
+
"schema": {
|
|
6208
|
+
"type": "object",
|
|
6209
|
+
"description": "Canonical error envelope returned by every endpoint on failure.",
|
|
6210
|
+
"properties": {
|
|
6211
|
+
"success": {
|
|
6212
|
+
"type": "boolean",
|
|
6213
|
+
"example": false
|
|
6214
|
+
},
|
|
6215
|
+
"code": {
|
|
6216
|
+
"type": "integer",
|
|
6217
|
+
"description": "HTTP status code echoed in the body.",
|
|
6218
|
+
"example": 400
|
|
6219
|
+
},
|
|
6220
|
+
"error": {
|
|
6221
|
+
"type": "string",
|
|
6222
|
+
"description": "Human-readable error message.",
|
|
6223
|
+
"example": "invalid request"
|
|
6224
|
+
}
|
|
6225
|
+
},
|
|
6226
|
+
"required": [
|
|
6227
|
+
"success",
|
|
6228
|
+
"error"
|
|
6229
|
+
]
|
|
6230
|
+
},
|
|
6231
|
+
"example": {
|
|
6232
|
+
"success": false,
|
|
6233
|
+
"code": 404,
|
|
6234
|
+
"error": "not found"
|
|
6235
|
+
}
|
|
6236
|
+
}
|
|
6237
|
+
}
|
|
6238
|
+
},
|
|
6239
|
+
"ServerError": {
|
|
6240
|
+
"description": "An unexpected error occurred on the server.",
|
|
6241
|
+
"content": {
|
|
6242
|
+
"application/json": {
|
|
6243
|
+
"schema": {
|
|
6244
|
+
"type": "object",
|
|
6245
|
+
"description": "Canonical error envelope returned by every endpoint on failure.",
|
|
6246
|
+
"properties": {
|
|
6247
|
+
"success": {
|
|
6248
|
+
"type": "boolean",
|
|
6249
|
+
"example": false
|
|
6250
|
+
},
|
|
6251
|
+
"code": {
|
|
6252
|
+
"type": "integer",
|
|
6253
|
+
"description": "HTTP status code echoed in the body.",
|
|
6254
|
+
"example": 400
|
|
6255
|
+
},
|
|
6256
|
+
"error": {
|
|
6257
|
+
"type": "string",
|
|
6258
|
+
"description": "Human-readable error message.",
|
|
6259
|
+
"example": "invalid request"
|
|
6260
|
+
}
|
|
6261
|
+
},
|
|
6262
|
+
"required": [
|
|
6263
|
+
"success",
|
|
6264
|
+
"error"
|
|
6265
|
+
]
|
|
6266
|
+
},
|
|
6267
|
+
"example": {
|
|
6268
|
+
"success": false,
|
|
6269
|
+
"code": 500,
|
|
6270
|
+
"error": "internal server error"
|
|
6271
|
+
}
|
|
6272
|
+
}
|
|
6273
|
+
}
|
|
6274
|
+
}
|
|
5701
6275
|
},
|
|
5702
6276
|
"schemas": {
|
|
5703
6277
|
"Error": {
|
|
@@ -5963,6 +6537,11 @@
|
|
|
5963
6537
|
]
|
|
5964
6538
|
},
|
|
5965
6539
|
"description": "Optional; max 3. Specificity-wins precedence: a rule pinning both `source_network_id` and `source_asset_symbol` beats a network-only rule. When nothing matches, settlements use the default destination.\n"
|
|
6540
|
+
},
|
|
6541
|
+
"routing_policy_id": {
|
|
6542
|
+
"type": "string",
|
|
6543
|
+
"description": "Routing policy to attach to this UDA. Omit or send an empty string to attach the tenant's default policy. Per-UDA inline `routing_rules` still take precedence over the policy.\n",
|
|
6544
|
+
"example": "rpol_2f8c1a9d4e5f6071"
|
|
5966
6545
|
}
|
|
5967
6546
|
},
|
|
5968
6547
|
"required": [
|
|
@@ -6358,6 +6937,215 @@
|
|
|
6358
6937
|
}
|
|
6359
6938
|
}
|
|
6360
6939
|
}
|
|
6940
|
+
},
|
|
6941
|
+
"routing_policy_id": {
|
|
6942
|
+
"type": "string",
|
|
6943
|
+
"description": "The routing policy attached to this UDA, when set. Omitted for legacy UDAs that inherit the tenant default policy.\n",
|
|
6944
|
+
"example": "rpol_2f8c1a9d4e5f6071"
|
|
6945
|
+
}
|
|
6946
|
+
}
|
|
6947
|
+
},
|
|
6948
|
+
"RoutingPolicy": {
|
|
6949
|
+
"type": "object",
|
|
6950
|
+
"description": "A tenant-scoped, ordered routing-policy. Rules are evaluated first-match-wins; an empty rule set falls through to the UDA's default destination.\n",
|
|
6951
|
+
"properties": {
|
|
6952
|
+
"id": {
|
|
6953
|
+
"type": "string",
|
|
6954
|
+
"example": "rpol_2f8c1a9d4e5f6071"
|
|
6955
|
+
},
|
|
6956
|
+
"name": {
|
|
6957
|
+
"type": "string",
|
|
6958
|
+
"example": "vip_tier"
|
|
6959
|
+
},
|
|
6960
|
+
"is_default": {
|
|
6961
|
+
"type": "boolean",
|
|
6962
|
+
"description": "Whether this is the tenant's default policy (one per tenant).",
|
|
6963
|
+
"example": false
|
|
6964
|
+
},
|
|
6965
|
+
"rules": {
|
|
6966
|
+
"type": "array",
|
|
6967
|
+
"description": "Ordered, first-match-wins routing rules (dual form).",
|
|
6968
|
+
"items": {
|
|
6969
|
+
"type": "object",
|
|
6970
|
+
"description": "An echoed routing rule in dual form (symbol plus resolved contract address).",
|
|
6971
|
+
"properties": {
|
|
6972
|
+
"match": {
|
|
6973
|
+
"type": "object",
|
|
6974
|
+
"properties": {
|
|
6975
|
+
"source_network_id": {
|
|
6976
|
+
"type": "string",
|
|
6977
|
+
"example": "60"
|
|
6978
|
+
},
|
|
6979
|
+
"source_asset_symbol": {
|
|
6980
|
+
"type": "string",
|
|
6981
|
+
"example": "USDT"
|
|
6982
|
+
},
|
|
6983
|
+
"source_token_address": {
|
|
6984
|
+
"type": "string",
|
|
6985
|
+
"example": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
|
|
6986
|
+
}
|
|
6987
|
+
}
|
|
6988
|
+
},
|
|
6989
|
+
"destination": {
|
|
6990
|
+
"type": "object",
|
|
6991
|
+
"properties": {
|
|
6992
|
+
"address": {
|
|
6993
|
+
"type": "string",
|
|
6994
|
+
"example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
|
|
6995
|
+
},
|
|
6996
|
+
"network_id": {
|
|
6997
|
+
"type": "string",
|
|
6998
|
+
"example": "60"
|
|
6999
|
+
},
|
|
7000
|
+
"eip155_id": {
|
|
7001
|
+
"type": "string",
|
|
7002
|
+
"example": "1"
|
|
7003
|
+
},
|
|
7004
|
+
"network_name": {
|
|
7005
|
+
"type": "string",
|
|
7006
|
+
"example": "Ethereum"
|
|
7007
|
+
},
|
|
7008
|
+
"asset_symbol": {
|
|
7009
|
+
"type": "string",
|
|
7010
|
+
"example": "USDC"
|
|
7011
|
+
},
|
|
7012
|
+
"asset_address": {
|
|
7013
|
+
"type": "string",
|
|
7014
|
+
"example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
|
|
7015
|
+
},
|
|
7016
|
+
"asset_decimals": {
|
|
7017
|
+
"type": "integer",
|
|
7018
|
+
"example": 6
|
|
7019
|
+
}
|
|
7020
|
+
}
|
|
7021
|
+
}
|
|
7022
|
+
}
|
|
7023
|
+
}
|
|
7024
|
+
},
|
|
7025
|
+
"created_at": {
|
|
7026
|
+
"type": "string",
|
|
7027
|
+
"format": "date-time",
|
|
7028
|
+
"example": "2026-05-20T14:03:12Z"
|
|
7029
|
+
},
|
|
7030
|
+
"updated_at": {
|
|
7031
|
+
"type": "string",
|
|
7032
|
+
"format": "date-time",
|
|
7033
|
+
"example": "2026-05-20T14:03:12Z"
|
|
7034
|
+
}
|
|
7035
|
+
}
|
|
7036
|
+
},
|
|
7037
|
+
"RoutingPolicyList": {
|
|
7038
|
+
"type": "object",
|
|
7039
|
+
"properties": {
|
|
7040
|
+
"data": {
|
|
7041
|
+
"type": "array",
|
|
7042
|
+
"items": {
|
|
7043
|
+
"type": "object",
|
|
7044
|
+
"description": "A tenant-scoped, ordered routing-policy. Rules are evaluated first-match-wins; an empty rule set falls through to the UDA's default destination.\n",
|
|
7045
|
+
"properties": {
|
|
7046
|
+
"id": {
|
|
7047
|
+
"type": "string",
|
|
7048
|
+
"example": "rpol_2f8c1a9d4e5f6071"
|
|
7049
|
+
},
|
|
7050
|
+
"name": {
|
|
7051
|
+
"type": "string",
|
|
7052
|
+
"example": "vip_tier"
|
|
7053
|
+
},
|
|
7054
|
+
"is_default": {
|
|
7055
|
+
"type": "boolean",
|
|
7056
|
+
"description": "Whether this is the tenant's default policy (one per tenant).",
|
|
7057
|
+
"example": false
|
|
7058
|
+
},
|
|
7059
|
+
"rules": {
|
|
7060
|
+
"type": "array",
|
|
7061
|
+
"description": "Ordered, first-match-wins routing rules (dual form).",
|
|
7062
|
+
"items": {
|
|
7063
|
+
"type": "object",
|
|
7064
|
+
"description": "An echoed routing rule in dual form (symbol plus resolved contract address).",
|
|
7065
|
+
"properties": {
|
|
7066
|
+
"match": {
|
|
7067
|
+
"type": "object",
|
|
7068
|
+
"properties": {
|
|
7069
|
+
"source_network_id": {
|
|
7070
|
+
"type": "string",
|
|
7071
|
+
"example": "60"
|
|
7072
|
+
},
|
|
7073
|
+
"source_asset_symbol": {
|
|
7074
|
+
"type": "string",
|
|
7075
|
+
"example": "USDT"
|
|
7076
|
+
},
|
|
7077
|
+
"source_token_address": {
|
|
7078
|
+
"type": "string",
|
|
7079
|
+
"example": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
|
|
7080
|
+
}
|
|
7081
|
+
}
|
|
7082
|
+
},
|
|
7083
|
+
"destination": {
|
|
7084
|
+
"type": "object",
|
|
7085
|
+
"properties": {
|
|
7086
|
+
"address": {
|
|
7087
|
+
"type": "string",
|
|
7088
|
+
"example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
|
|
7089
|
+
},
|
|
7090
|
+
"network_id": {
|
|
7091
|
+
"type": "string",
|
|
7092
|
+
"example": "60"
|
|
7093
|
+
},
|
|
7094
|
+
"eip155_id": {
|
|
7095
|
+
"type": "string",
|
|
7096
|
+
"example": "1"
|
|
7097
|
+
},
|
|
7098
|
+
"network_name": {
|
|
7099
|
+
"type": "string",
|
|
7100
|
+
"example": "Ethereum"
|
|
7101
|
+
},
|
|
7102
|
+
"asset_symbol": {
|
|
7103
|
+
"type": "string",
|
|
7104
|
+
"example": "USDC"
|
|
7105
|
+
},
|
|
7106
|
+
"asset_address": {
|
|
7107
|
+
"type": "string",
|
|
7108
|
+
"example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
|
|
7109
|
+
},
|
|
7110
|
+
"asset_decimals": {
|
|
7111
|
+
"type": "integer",
|
|
7112
|
+
"example": 6
|
|
7113
|
+
}
|
|
7114
|
+
}
|
|
7115
|
+
}
|
|
7116
|
+
}
|
|
7117
|
+
}
|
|
7118
|
+
},
|
|
7119
|
+
"created_at": {
|
|
7120
|
+
"type": "string",
|
|
7121
|
+
"format": "date-time",
|
|
7122
|
+
"example": "2026-05-20T14:03:12Z"
|
|
7123
|
+
},
|
|
7124
|
+
"updated_at": {
|
|
7125
|
+
"type": "string",
|
|
7126
|
+
"format": "date-time",
|
|
7127
|
+
"example": "2026-05-20T14:03:12Z"
|
|
7128
|
+
}
|
|
7129
|
+
}
|
|
7130
|
+
}
|
|
7131
|
+
},
|
|
7132
|
+
"pagination": {
|
|
7133
|
+
"type": "object",
|
|
7134
|
+
"properties": {
|
|
7135
|
+
"count": {
|
|
7136
|
+
"type": "integer",
|
|
7137
|
+
"description": "Number of items in this page.",
|
|
7138
|
+
"example": 20
|
|
7139
|
+
},
|
|
7140
|
+
"limit": {
|
|
7141
|
+
"type": "integer",
|
|
7142
|
+
"example": 50
|
|
7143
|
+
},
|
|
7144
|
+
"offset": {
|
|
7145
|
+
"type": "integer",
|
|
7146
|
+
"example": 0
|
|
7147
|
+
}
|
|
7148
|
+
}
|
|
6361
7149
|
}
|
|
6362
7150
|
}
|
|
6363
7151
|
},
|
|
@@ -6533,6 +7321,11 @@
|
|
|
6533
7321
|
}
|
|
6534
7322
|
}
|
|
6535
7323
|
}
|
|
7324
|
+
},
|
|
7325
|
+
"routing_policy_id": {
|
|
7326
|
+
"type": "string",
|
|
7327
|
+
"description": "The routing policy attached to this UDA, when set. Omitted for legacy UDAs that inherit the tenant default policy.\n",
|
|
7328
|
+
"example": "rpol_2f8c1a9d4e5f6071"
|
|
6536
7329
|
}
|
|
6537
7330
|
}
|
|
6538
7331
|
}
|
|
@@ -7484,13 +8277,15 @@
|
|
|
7484
8277
|
},
|
|
7485
8278
|
"eip155_id": {
|
|
7486
8279
|
"type": "integer",
|
|
8280
|
+
"description": "Chain-specific numeric id: the EIP-155 chain id for EVM networks, or the analogous numeric chain id Stridge uses for non-EVM (TVM, SVM) networks. Always present.\n",
|
|
7487
8281
|
"example": 1
|
|
7488
8282
|
},
|
|
7489
8283
|
"chain_type": {
|
|
7490
8284
|
"type": "string",
|
|
7491
8285
|
"enum": [
|
|
7492
8286
|
"EVM",
|
|
7493
|
-
"TVM"
|
|
8287
|
+
"TVM",
|
|
8288
|
+
"SVM"
|
|
7494
8289
|
],
|
|
7495
8290
|
"example": "EVM"
|
|
7496
8291
|
},
|
|
@@ -7583,13 +8378,15 @@
|
|
|
7583
8378
|
},
|
|
7584
8379
|
"eip155_id": {
|
|
7585
8380
|
"type": "integer",
|
|
8381
|
+
"description": "Chain-specific numeric id: the EIP-155 chain id for EVM networks, or the analogous numeric chain id Stridge uses for non-EVM (TVM, SVM) networks. Always present.\n",
|
|
7586
8382
|
"example": 1
|
|
7587
8383
|
},
|
|
7588
8384
|
"chain_type": {
|
|
7589
8385
|
"type": "string",
|
|
7590
8386
|
"enum": [
|
|
7591
8387
|
"EVM",
|
|
7592
|
-
"TVM"
|
|
8388
|
+
"TVM",
|
|
8389
|
+
"SVM"
|
|
7593
8390
|
],
|
|
7594
8391
|
"example": "EVM"
|
|
7595
8392
|
},
|
|
@@ -8030,11 +8827,20 @@
|
|
|
8030
8827
|
"description": "Free-form note stored on the payout.",
|
|
8031
8828
|
"example": "Payment for order #12345"
|
|
8032
8829
|
},
|
|
8830
|
+
"type": {
|
|
8831
|
+
"type": "string",
|
|
8832
|
+
"enum": [
|
|
8833
|
+
"normal",
|
|
8834
|
+
"forceful"
|
|
8835
|
+
],
|
|
8836
|
+
"default": "normal",
|
|
8837
|
+
"description": "Payout strategy. `normal` (default) refills gas when needed and retries until `expired_at`. `forceful` still refills when needed but is single-attempt — the refill and the transfer are each tried once, with no retry and no `expired_at`; it fails immediately if either can't complete.\n"
|
|
8838
|
+
},
|
|
8033
8839
|
"expired_at": {
|
|
8034
8840
|
"type": "string",
|
|
8035
8841
|
"format": "date-time",
|
|
8036
|
-
"description": "Cutoff after which a non-confirmed payout expires.",
|
|
8037
|
-
"example": "2026-
|
|
8842
|
+
"description": "Cutoff after which a non-confirmed payout expires. Defaults to 1 hour from creation; capped at 12 hours ahead. Ignored for `forceful` payouts.\n",
|
|
8843
|
+
"example": "2026-01-01T01:00:00Z"
|
|
8038
8844
|
}
|
|
8039
8845
|
},
|
|
8040
8846
|
"required": [
|
|
@@ -8052,7 +8858,8 @@
|
|
|
8052
8858
|
"reference_id": "order-12345",
|
|
8053
8859
|
"amount": "100.50",
|
|
8054
8860
|
"remark": "Payment for order #12345",
|
|
8055
|
-
"
|
|
8861
|
+
"type": "normal",
|
|
8862
|
+
"expired_at": "2026-01-01T01:00:00Z"
|
|
8056
8863
|
}
|
|
8057
8864
|
},
|
|
8058
8865
|
"Payout": {
|
|
@@ -8101,6 +8908,15 @@
|
|
|
8101
8908
|
"type": "string",
|
|
8102
8909
|
"example": "Payment for order #12345"
|
|
8103
8910
|
},
|
|
8911
|
+
"type": {
|
|
8912
|
+
"type": "string",
|
|
8913
|
+
"enum": [
|
|
8914
|
+
"normal",
|
|
8915
|
+
"forceful"
|
|
8916
|
+
],
|
|
8917
|
+
"description": "Payout strategy the payout was created with.",
|
|
8918
|
+
"example": "normal"
|
|
8919
|
+
},
|
|
8104
8920
|
"status": {
|
|
8105
8921
|
"type": "string",
|
|
8106
8922
|
"enum": [
|
|
@@ -8135,7 +8951,7 @@
|
|
|
8135
8951
|
"expired_at": {
|
|
8136
8952
|
"type": "string",
|
|
8137
8953
|
"format": "date-time",
|
|
8138
|
-
"example": "2026-
|
|
8954
|
+
"example": "2026-01-01T01:00:00Z"
|
|
8139
8955
|
}
|
|
8140
8956
|
}
|
|
8141
8957
|
},
|
|
@@ -8188,6 +9004,15 @@
|
|
|
8188
9004
|
"type": "string",
|
|
8189
9005
|
"example": "Payment for order #12345"
|
|
8190
9006
|
},
|
|
9007
|
+
"type": {
|
|
9008
|
+
"type": "string",
|
|
9009
|
+
"enum": [
|
|
9010
|
+
"normal",
|
|
9011
|
+
"forceful"
|
|
9012
|
+
],
|
|
9013
|
+
"description": "Payout strategy the payout was created with.",
|
|
9014
|
+
"example": "normal"
|
|
9015
|
+
},
|
|
8191
9016
|
"status": {
|
|
8192
9017
|
"type": "string",
|
|
8193
9018
|
"enum": [
|
|
@@ -8222,7 +9047,7 @@
|
|
|
8222
9047
|
"expired_at": {
|
|
8223
9048
|
"type": "string",
|
|
8224
9049
|
"format": "date-time",
|
|
8225
|
-
"example": "2026-
|
|
9050
|
+
"example": "2026-01-01T01:00:00Z"
|
|
8226
9051
|
}
|
|
8227
9052
|
}
|
|
8228
9053
|
}
|
|
@@ -8279,6 +9104,15 @@
|
|
|
8279
9104
|
"type": "string",
|
|
8280
9105
|
"example": "Payment for order #12345"
|
|
8281
9106
|
},
|
|
9107
|
+
"type": {
|
|
9108
|
+
"type": "string",
|
|
9109
|
+
"enum": [
|
|
9110
|
+
"normal",
|
|
9111
|
+
"forceful"
|
|
9112
|
+
],
|
|
9113
|
+
"description": "Payout strategy the payout was created with.",
|
|
9114
|
+
"example": "normal"
|
|
9115
|
+
},
|
|
8282
9116
|
"status": {
|
|
8283
9117
|
"type": "string",
|
|
8284
9118
|
"enum": [
|
|
@@ -8313,7 +9147,7 @@
|
|
|
8313
9147
|
"expired_at": {
|
|
8314
9148
|
"type": "string",
|
|
8315
9149
|
"format": "date-time",
|
|
8316
|
-
"example": "2026-
|
|
9150
|
+
"example": "2026-01-01T01:00:00Z"
|
|
8317
9151
|
}
|
|
8318
9152
|
}
|
|
8319
9153
|
}
|