@stridge/openapi 0.1.0 → 0.2.1

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.json CHANGED
@@ -24,6 +24,14 @@
24
24
  {
25
25
  "name": "UDA",
26
26
  "description": "Universal Deposit Addresses — allocate cross-chain deposit addresses, fetch indicative quotes, and track settlements.\n"
27
+ },
28
+ {
29
+ "name": "Payout",
30
+ "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"
31
+ },
32
+ {
33
+ "name": "Gas Stations",
34
+ "description": "Native-gas wallets that fund payout transactions. Stridge refills a vault wallet from a gas station automatically before a transfer when it is short on gas.\n"
27
35
  }
28
36
  ],
29
37
  "paths": {
@@ -440,913 +448,2127 @@
440
448
  }
441
449
  }
442
450
  }
443
- }
444
- },
445
- "components": {
446
- "securitySchemes": {
447
- "ApiKeyAuth": {
448
- "type": "apiKey",
449
- "in": "header",
450
- "name": "X-API-Key",
451
- "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"
452
- }
453
451
  },
454
- "parameters": {
455
- "LimitParam": {
456
- "name": "limit",
457
- "in": "query",
458
- "description": "Page size (default 50, max 200).",
459
- "schema": {
460
- "type": "integer",
461
- "default": 50,
462
- "minimum": 1,
463
- "maximum": 200
464
- }
465
- },
466
- "OffsetParam": {
467
- "name": "offset",
468
- "in": "query",
469
- "description": "Number of items to skip (default 0).",
470
- "schema": {
471
- "type": "integer",
472
- "default": 0,
473
- "minimum": 0
452
+ "/vault": {
453
+ "get": {
454
+ "operationId": "list-vaults",
455
+ "tags": [
456
+ "Payout"
457
+ ],
458
+ "summary": "List vaults",
459
+ "description": "List all vault accounts for the authenticated tenant.",
460
+ "security": [
461
+ {
462
+ "ApiKeyAuth": []
463
+ }
464
+ ],
465
+ "responses": {
466
+ "200": {
467
+ "description": "A list of vaults.",
468
+ "content": {
469
+ "application/json": {
470
+ "schema": {
471
+ "$ref": "#/components/schemas/VaultList"
472
+ }
473
+ }
474
+ }
475
+ },
476
+ "401": {
477
+ "$ref": "#/components/responses/Unauthorized"
478
+ },
479
+ "500": {
480
+ "$ref": "#/components/responses/ServerError"
481
+ }
474
482
  }
475
483
  }
476
484
  },
477
- "responses": {
478
- "BadRequest": {
479
- "description": "The request was malformed or failed validation.",
480
- "content": {
481
- "application/json": {
482
- "schema": {
483
- "$ref": "#/components/schemas/Error"
484
- },
485
- "example": {
486
- "success": false,
487
- "code": 400,
488
- "error": "invalid request"
489
- }
485
+ "/vault/{vault_id}/addresses": {
486
+ "get": {
487
+ "operationId": "list-vault-addresses",
488
+ "tags": [
489
+ "Payout"
490
+ ],
491
+ "summary": "List vault addresses",
492
+ "description": "Get all vault addresses for the authenticated tenant.",
493
+ "security": [
494
+ {
495
+ "ApiKeyAuth": []
490
496
  }
491
- }
492
- },
493
- "Unauthorized": {
494
- "description": "The `X-API-Key` header is missing or invalid.",
495
- "content": {
496
- "application/json": {
497
- "schema": {
498
- "$ref": "#/components/schemas/Error"
499
- },
500
- "example": {
501
- "success": false,
502
- "code": 401,
503
- "error": "unauthenticated"
497
+ ],
498
+ "parameters": [
499
+ {
500
+ "$ref": "#/components/parameters/VaultIdParam"
501
+ }
502
+ ],
503
+ "responses": {
504
+ "200": {
505
+ "description": "A list of vault addresses.",
506
+ "content": {
507
+ "application/json": {
508
+ "schema": {
509
+ "$ref": "#/components/schemas/VaultAddressList"
510
+ }
511
+ }
504
512
  }
513
+ },
514
+ "400": {
515
+ "$ref": "#/components/responses/BadRequest"
516
+ },
517
+ "401": {
518
+ "$ref": "#/components/responses/Unauthorized"
519
+ },
520
+ "404": {
521
+ "$ref": "#/components/responses/NotFound"
522
+ },
523
+ "500": {
524
+ "$ref": "#/components/responses/ServerError"
505
525
  }
506
526
  }
507
- },
508
- "NotFound": {
509
- "description": "The requested resource does not exist.",
510
- "content": {
511
- "application/json": {
527
+ }
528
+ },
529
+ "/vault/{vault_id}/addresses/{network}": {
530
+ "get": {
531
+ "operationId": "get-vault-address-by-network",
532
+ "tags": [
533
+ "Payout"
534
+ ],
535
+ "summary": "Get vault address by network",
536
+ "description": "Get the vault address for a specific network.",
537
+ "security": [
538
+ {
539
+ "ApiKeyAuth": []
540
+ }
541
+ ],
542
+ "parameters": [
543
+ {
544
+ "$ref": "#/components/parameters/VaultIdParam"
545
+ },
546
+ {
547
+ "name": "network",
548
+ "in": "path",
549
+ "required": true,
550
+ "description": "Network name (e.g. `ethereum`, `tron`).",
512
551
  "schema": {
513
- "$ref": "#/components/schemas/Error"
514
- },
515
- "example": {
516
- "success": false,
517
- "code": 404,
518
- "error": "not found"
552
+ "type": "string"
519
553
  }
520
554
  }
521
- }
522
- },
523
- "ServerError": {
524
- "description": "An unexpected error occurred on the server.",
525
- "content": {
526
- "application/json": {
527
- "schema": {
528
- "$ref": "#/components/schemas/Error"
529
- },
530
- "example": {
531
- "success": false,
532
- "code": 500,
533
- "error": "internal server error"
555
+ ],
556
+ "responses": {
557
+ "200": {
558
+ "description": "The vault address on the requested network.",
559
+ "content": {
560
+ "application/json": {
561
+ "schema": {
562
+ "$ref": "#/components/schemas/VaultAddressResponse"
563
+ }
564
+ }
534
565
  }
566
+ },
567
+ "400": {
568
+ "$ref": "#/components/responses/BadRequest"
569
+ },
570
+ "401": {
571
+ "$ref": "#/components/responses/Unauthorized"
572
+ },
573
+ "404": {
574
+ "$ref": "#/components/responses/NotFound"
575
+ },
576
+ "500": {
577
+ "$ref": "#/components/responses/ServerError"
535
578
  }
536
579
  }
537
580
  }
538
581
  },
539
- "schemas": {
540
- "Error": {
541
- "type": "object",
542
- "description": "Canonical error envelope returned by every endpoint on failure.",
543
- "properties": {
544
- "success": {
545
- "type": "boolean",
546
- "example": false
582
+ "/vault/{vault_id}/balances": {
583
+ "get": {
584
+ "operationId": "get-vault-balances",
585
+ "tags": [
586
+ "Payout"
587
+ ],
588
+ "summary": "Get vault balances",
589
+ "description": "Get balances for all vault addresses, with optional filtering by network and asset.",
590
+ "security": [
591
+ {
592
+ "ApiKeyAuth": []
593
+ }
594
+ ],
595
+ "parameters": [
596
+ {
597
+ "$ref": "#/components/parameters/VaultIdParam"
547
598
  },
548
- "code": {
549
- "type": "integer",
550
- "description": "HTTP status code echoed in the body.",
551
- "example": 400
599
+ {
600
+ "name": "network",
601
+ "in": "query",
602
+ "description": "Filter by network.",
603
+ "schema": {
604
+ "type": "string"
605
+ }
552
606
  },
553
- "error": {
554
- "type": "string",
555
- "description": "Human-readable error message.",
556
- "example": "invalid request"
607
+ {
608
+ "name": "asset",
609
+ "in": "query",
610
+ "description": "Filter by asset.",
611
+ "schema": {
612
+ "type": "string"
613
+ }
557
614
  }
558
- },
559
- "required": [
560
- "success",
561
- "error"
562
- ]
563
- },
564
- "SuccessEnvelope": {
565
- "type": "object",
566
- "description": "Wrapper carried by enveloped responses; the payload is in `data`.",
567
- "properties": {
568
- "success": {
569
- "type": "boolean",
570
- "example": true
615
+ ],
616
+ "responses": {
617
+ "200": {
618
+ "description": "Vault balances.",
619
+ "content": {
620
+ "application/json": {
621
+ "schema": {
622
+ "$ref": "#/components/schemas/VaultBalancesResponse"
623
+ }
624
+ }
625
+ }
571
626
  },
572
- "message": {
573
- "type": "string",
574
- "example": "operation completed successfully"
575
- }
576
- },
577
- "required": [
578
- "success"
579
- ]
580
- },
581
- "Pagination": {
582
- "type": "object",
583
- "properties": {
584
- "count": {
585
- "type": "integer",
586
- "description": "Number of items in this page.",
587
- "example": 20
627
+ "400": {
628
+ "$ref": "#/components/responses/BadRequest"
588
629
  },
589
- "limit": {
590
- "type": "integer",
591
- "example": 50
630
+ "401": {
631
+ "$ref": "#/components/responses/Unauthorized"
592
632
  },
593
- "offset": {
633
+ "404": {
634
+ "$ref": "#/components/responses/NotFound"
635
+ },
636
+ "500": {
637
+ "$ref": "#/components/responses/ServerError"
638
+ }
639
+ }
640
+ }
641
+ },
642
+ "/vault/{vault_id}/total": {
643
+ "get": {
644
+ "operationId": "get-vault-total",
645
+ "tags": [
646
+ "Payout"
647
+ ],
648
+ "summary": "Get vault total value",
649
+ "description": "Get the total USD value across all vault assets.",
650
+ "security": [
651
+ {
652
+ "ApiKeyAuth": []
653
+ }
654
+ ],
655
+ "parameters": [
656
+ {
657
+ "$ref": "#/components/parameters/VaultIdParam"
658
+ },
659
+ {
660
+ "name": "include_currency",
661
+ "in": "query",
662
+ "description": "Currencies to include (e.g. `usd`).",
663
+ "schema": {
664
+ "type": "string"
665
+ }
666
+ }
667
+ ],
668
+ "responses": {
669
+ "200": {
670
+ "description": "The total vault value.",
671
+ "content": {
672
+ "application/json": {
673
+ "schema": {
674
+ "$ref": "#/components/schemas/VaultTotalResponse"
675
+ }
676
+ }
677
+ }
678
+ },
679
+ "400": {
680
+ "$ref": "#/components/responses/BadRequest"
681
+ },
682
+ "401": {
683
+ "$ref": "#/components/responses/Unauthorized"
684
+ },
685
+ "404": {
686
+ "$ref": "#/components/responses/NotFound"
687
+ },
688
+ "500": {
689
+ "$ref": "#/components/responses/ServerError"
690
+ }
691
+ }
692
+ }
693
+ },
694
+ "/transfer/payout": {
695
+ "get": {
696
+ "operationId": "list-payouts",
697
+ "tags": [
698
+ "Payout"
699
+ ],
700
+ "summary": "List payouts",
701
+ "description": "List payouts for a vault, with filtering and pagination.",
702
+ "security": [
703
+ {
704
+ "ApiKeyAuth": []
705
+ }
706
+ ],
707
+ "parameters": [
708
+ {
709
+ "name": "vault_id",
710
+ "in": "query",
711
+ "required": true,
712
+ "description": "Vault id.",
713
+ "schema": {
714
+ "type": "string"
715
+ }
716
+ },
717
+ {
718
+ "$ref": "#/components/parameters/PageParam"
719
+ },
720
+ {
721
+ "$ref": "#/components/parameters/PageSizeParam"
722
+ }
723
+ ],
724
+ "responses": {
725
+ "200": {
726
+ "description": "A page of payouts.",
727
+ "content": {
728
+ "application/json": {
729
+ "schema": {
730
+ "$ref": "#/components/schemas/PayoutList"
731
+ }
732
+ }
733
+ }
734
+ },
735
+ "400": {
736
+ "description": "Missing `vault_id` or invalid filters.",
737
+ "content": {
738
+ "application/json": {
739
+ "schema": {
740
+ "$ref": "#/components/schemas/Error"
741
+ }
742
+ }
743
+ }
744
+ },
745
+ "401": {
746
+ "$ref": "#/components/responses/Unauthorized"
747
+ },
748
+ "500": {
749
+ "$ref": "#/components/responses/ServerError"
750
+ }
751
+ }
752
+ },
753
+ "post": {
754
+ "operationId": "create-payout",
755
+ "tags": [
756
+ "Payout"
757
+ ],
758
+ "summary": "Create payout",
759
+ "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.\n",
760
+ "security": [
761
+ {
762
+ "ApiKeyAuth": []
763
+ }
764
+ ],
765
+ "requestBody": {
766
+ "required": true,
767
+ "description": "Create payout request.",
768
+ "content": {
769
+ "application/json": {
770
+ "schema": {
771
+ "$ref": "#/components/schemas/CreatePayoutRequest"
772
+ }
773
+ }
774
+ }
775
+ },
776
+ "responses": {
777
+ "201": {
778
+ "description": "The payout was created.",
779
+ "content": {
780
+ "application/json": {
781
+ "schema": {
782
+ "$ref": "#/components/schemas/PayoutResponse"
783
+ }
784
+ }
785
+ }
786
+ },
787
+ "400": {
788
+ "description": "Validation error or insufficient balance.",
789
+ "content": {
790
+ "application/json": {
791
+ "schema": {
792
+ "$ref": "#/components/schemas/Error"
793
+ }
794
+ }
795
+ }
796
+ },
797
+ "401": {
798
+ "$ref": "#/components/responses/Unauthorized"
799
+ },
800
+ "404": {
801
+ "$ref": "#/components/responses/NotFound"
802
+ },
803
+ "409": {
804
+ "description": "Duplicate `reference_id`.",
805
+ "content": {
806
+ "application/json": {
807
+ "schema": {
808
+ "$ref": "#/components/schemas/Error"
809
+ }
810
+ }
811
+ }
812
+ },
813
+ "500": {
814
+ "$ref": "#/components/responses/ServerError"
815
+ }
816
+ }
817
+ }
818
+ },
819
+ "/transfer/payout/pending": {
820
+ "get": {
821
+ "operationId": "list-pending-payouts",
822
+ "tags": [
823
+ "Payout"
824
+ ],
825
+ "summary": "List pending payouts",
826
+ "description": "List payouts in the queued state (still being retried). Same filters and pagination as `list-payouts`; status is forced to `queued`.\n",
827
+ "security": [
828
+ {
829
+ "ApiKeyAuth": []
830
+ }
831
+ ],
832
+ "parameters": [
833
+ {
834
+ "name": "vault_id",
835
+ "in": "query",
836
+ "required": true,
837
+ "description": "Vault id.",
838
+ "schema": {
839
+ "type": "string"
840
+ }
841
+ },
842
+ {
843
+ "$ref": "#/components/parameters/PageParam"
844
+ },
845
+ {
846
+ "$ref": "#/components/parameters/PageSizeParam"
847
+ }
848
+ ],
849
+ "responses": {
850
+ "200": {
851
+ "description": "A page of pending payouts.",
852
+ "content": {
853
+ "application/json": {
854
+ "schema": {
855
+ "$ref": "#/components/schemas/PayoutList"
856
+ }
857
+ }
858
+ }
859
+ },
860
+ "400": {
861
+ "description": "Missing `vault_id` or invalid filters.",
862
+ "content": {
863
+ "application/json": {
864
+ "schema": {
865
+ "$ref": "#/components/schemas/Error"
866
+ }
867
+ }
868
+ }
869
+ },
870
+ "401": {
871
+ "$ref": "#/components/responses/Unauthorized"
872
+ },
873
+ "500": {
874
+ "$ref": "#/components/responses/ServerError"
875
+ }
876
+ }
877
+ }
878
+ },
879
+ "/transfer/payout/{id}": {
880
+ "get": {
881
+ "operationId": "get-payout",
882
+ "tags": [
883
+ "Payout"
884
+ ],
885
+ "summary": "Get payout by id",
886
+ "description": "Retrieve a payout by its id.",
887
+ "security": [
888
+ {
889
+ "ApiKeyAuth": []
890
+ }
891
+ ],
892
+ "parameters": [
893
+ {
894
+ "name": "id",
895
+ "in": "path",
896
+ "required": true,
897
+ "description": "Payout id.",
898
+ "schema": {
899
+ "type": "string"
900
+ }
901
+ }
902
+ ],
903
+ "responses": {
904
+ "200": {
905
+ "description": "The payout.",
906
+ "content": {
907
+ "application/json": {
908
+ "schema": {
909
+ "$ref": "#/components/schemas/PayoutResponse"
910
+ }
911
+ }
912
+ }
913
+ },
914
+ "401": {
915
+ "$ref": "#/components/responses/Unauthorized"
916
+ },
917
+ "404": {
918
+ "$ref": "#/components/responses/NotFound"
919
+ },
920
+ "500": {
921
+ "$ref": "#/components/responses/ServerError"
922
+ }
923
+ }
924
+ }
925
+ },
926
+ "/transfer/payout/{id}/reject": {
927
+ "post": {
928
+ "operationId": "reject-payout",
929
+ "tags": [
930
+ "Payout"
931
+ ],
932
+ "summary": "Reject pending payout",
933
+ "description": "Cancel a pending payout. Stridge stops retrying it and it transitions to `expired` through the normal flow (a `payout.expired` webhook fires). Only valid while the payout is pending.\n",
934
+ "security": [
935
+ {
936
+ "ApiKeyAuth": []
937
+ }
938
+ ],
939
+ "parameters": [
940
+ {
941
+ "name": "id",
942
+ "in": "path",
943
+ "required": true,
944
+ "description": "Payout id.",
945
+ "schema": {
946
+ "type": "string"
947
+ }
948
+ }
949
+ ],
950
+ "responses": {
951
+ "200": {
952
+ "description": "The reject was requested.",
953
+ "content": {
954
+ "application/json": {
955
+ "schema": {
956
+ "$ref": "#/components/schemas/SuccessEnvelope"
957
+ }
958
+ }
959
+ }
960
+ },
961
+ "401": {
962
+ "$ref": "#/components/responses/Unauthorized"
963
+ },
964
+ "404": {
965
+ "$ref": "#/components/responses/NotFound"
966
+ },
967
+ "409": {
968
+ "description": "The payout is already final or past pending.",
969
+ "content": {
970
+ "application/json": {
971
+ "schema": {
972
+ "$ref": "#/components/schemas/Error"
973
+ }
974
+ }
975
+ }
976
+ },
977
+ "500": {
978
+ "$ref": "#/components/responses/ServerError"
979
+ }
980
+ }
981
+ }
982
+ },
983
+ "/gas-stations/address/{address}": {
984
+ "get": {
985
+ "operationId": "get-gas-station-by-address",
986
+ "tags": [
987
+ "Gas Stations"
988
+ ],
989
+ "summary": "Get gas station details by address",
990
+ "description": "Get gas station details, including all asset balances, for a specific address.",
991
+ "security": [
992
+ {
993
+ "ApiKeyAuth": []
994
+ }
995
+ ],
996
+ "parameters": [
997
+ {
998
+ "name": "address",
999
+ "in": "path",
1000
+ "required": true,
1001
+ "description": "Gas station address.",
1002
+ "schema": {
1003
+ "type": "string"
1004
+ }
1005
+ }
1006
+ ],
1007
+ "responses": {
1008
+ "200": {
1009
+ "description": "Gas station details with balances.",
1010
+ "content": {
1011
+ "application/json": {
1012
+ "schema": {
1013
+ "$ref": "#/components/schemas/GasStationResponse"
1014
+ }
1015
+ }
1016
+ }
1017
+ },
1018
+ "400": {
1019
+ "$ref": "#/components/responses/BadRequest"
1020
+ },
1021
+ "401": {
1022
+ "$ref": "#/components/responses/Unauthorized"
1023
+ },
1024
+ "404": {
1025
+ "$ref": "#/components/responses/NotFound"
1026
+ },
1027
+ "500": {
1028
+ "$ref": "#/components/responses/ServerError"
1029
+ }
1030
+ }
1031
+ }
1032
+ },
1033
+ "/gas-stations/wallet/{wallet_id}": {
1034
+ "get": {
1035
+ "operationId": "get-gas-station-by-wallet",
1036
+ "tags": [
1037
+ "Gas Stations"
1038
+ ],
1039
+ "summary": "Get gas station details by wallet id",
1040
+ "description": "Get gas station details, including all asset balances, for a specific wallet id.",
1041
+ "security": [
1042
+ {
1043
+ "ApiKeyAuth": []
1044
+ }
1045
+ ],
1046
+ "parameters": [
1047
+ {
1048
+ "name": "wallet_id",
1049
+ "in": "path",
1050
+ "required": true,
1051
+ "description": "Wallet id (UUID).",
1052
+ "schema": {
1053
+ "type": "string"
1054
+ }
1055
+ }
1056
+ ],
1057
+ "responses": {
1058
+ "200": {
1059
+ "description": "Gas station details with balances.",
1060
+ "content": {
1061
+ "application/json": {
1062
+ "schema": {
1063
+ "$ref": "#/components/schemas/GasStationResponse"
1064
+ }
1065
+ }
1066
+ }
1067
+ },
1068
+ "400": {
1069
+ "$ref": "#/components/responses/BadRequest"
1070
+ },
1071
+ "401": {
1072
+ "$ref": "#/components/responses/Unauthorized"
1073
+ },
1074
+ "404": {
1075
+ "$ref": "#/components/responses/NotFound"
1076
+ },
1077
+ "500": {
1078
+ "$ref": "#/components/responses/ServerError"
1079
+ }
1080
+ }
1081
+ }
1082
+ },
1083
+ "/gas-stations/wallets": {
1084
+ "get": {
1085
+ "operationId": "list-gas-station-wallets",
1086
+ "tags": [
1087
+ "Gas Stations"
1088
+ ],
1089
+ "summary": "List gas station wallets",
1090
+ "description": "Get a paginated list of gas station wallets, with filtering and sorting.",
1091
+ "security": [
1092
+ {
1093
+ "ApiKeyAuth": []
1094
+ }
1095
+ ],
1096
+ "parameters": [
1097
+ {
1098
+ "name": "filter[]",
1099
+ "in": "query",
1100
+ "description": "Filter conditions (AND semantics). Format: `field:operator:value`.",
1101
+ "schema": {
1102
+ "type": "array",
1103
+ "items": {
1104
+ "type": "string"
1105
+ }
1106
+ }
1107
+ },
1108
+ {
1109
+ "name": "filterOr[]",
1110
+ "in": "query",
1111
+ "description": "Filter conditions (OR semantics). Format: `field:operator:value`.",
1112
+ "schema": {
1113
+ "type": "array",
1114
+ "items": {
1115
+ "type": "string"
1116
+ }
1117
+ }
1118
+ },
1119
+ {
1120
+ "name": "sort[]",
1121
+ "in": "query",
1122
+ "description": "Sort fields. Format: `field:direction` (`asc`/`desc`).",
1123
+ "schema": {
1124
+ "type": "array",
1125
+ "items": {
1126
+ "type": "string"
1127
+ }
1128
+ }
1129
+ },
1130
+ {
1131
+ "$ref": "#/components/parameters/PageParam"
1132
+ },
1133
+ {
1134
+ "$ref": "#/components/parameters/PageSizeParam"
1135
+ }
1136
+ ],
1137
+ "responses": {
1138
+ "200": {
1139
+ "description": "A page of gas station wallets.",
1140
+ "content": {
1141
+ "application/json": {
1142
+ "schema": {
1143
+ "$ref": "#/components/schemas/GasStationWalletList"
1144
+ }
1145
+ }
1146
+ }
1147
+ },
1148
+ "400": {
1149
+ "$ref": "#/components/responses/BadRequest"
1150
+ },
1151
+ "401": {
1152
+ "$ref": "#/components/responses/Unauthorized"
1153
+ },
1154
+ "404": {
1155
+ "$ref": "#/components/responses/NotFound"
1156
+ },
1157
+ "500": {
1158
+ "$ref": "#/components/responses/ServerError"
1159
+ }
1160
+ }
1161
+ }
1162
+ }
1163
+ },
1164
+ "components": {
1165
+ "securitySchemes": {
1166
+ "ApiKeyAuth": {
1167
+ "type": "apiKey",
1168
+ "in": "header",
1169
+ "name": "X-API-Key",
1170
+ "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"
1171
+ }
1172
+ },
1173
+ "parameters": {
1174
+ "LimitParam": {
1175
+ "name": "limit",
1176
+ "in": "query",
1177
+ "description": "Page size (default 50, max 200).",
1178
+ "schema": {
1179
+ "type": "integer",
1180
+ "default": 50,
1181
+ "minimum": 1,
1182
+ "maximum": 200
1183
+ }
1184
+ },
1185
+ "OffsetParam": {
1186
+ "name": "offset",
1187
+ "in": "query",
1188
+ "description": "Number of items to skip (default 0).",
1189
+ "schema": {
1190
+ "type": "integer",
1191
+ "default": 0,
1192
+ "minimum": 0
1193
+ }
1194
+ },
1195
+ "VaultIdParam": {
1196
+ "name": "vault_id",
1197
+ "in": "path",
1198
+ "required": true,
1199
+ "description": "Vault id.",
1200
+ "schema": {
1201
+ "type": "string"
1202
+ }
1203
+ },
1204
+ "PageParam": {
1205
+ "name": "page",
1206
+ "in": "query",
1207
+ "description": "Page number (default 1).",
1208
+ "schema": {
1209
+ "type": "integer",
1210
+ "default": 1,
1211
+ "minimum": 1
1212
+ }
1213
+ },
1214
+ "PageSizeParam": {
1215
+ "name": "limit",
1216
+ "in": "query",
1217
+ "description": "Items per page (default 20, max 100).",
1218
+ "schema": {
1219
+ "type": "integer",
1220
+ "default": 20,
1221
+ "minimum": 1,
1222
+ "maximum": 100
1223
+ }
1224
+ }
1225
+ },
1226
+ "responses": {
1227
+ "BadRequest": {
1228
+ "description": "The request was malformed or failed validation.",
1229
+ "content": {
1230
+ "application/json": {
1231
+ "schema": {
1232
+ "$ref": "#/components/schemas/Error"
1233
+ },
1234
+ "example": {
1235
+ "success": false,
1236
+ "code": 400,
1237
+ "error": "invalid request"
1238
+ }
1239
+ }
1240
+ }
1241
+ },
1242
+ "Unauthorized": {
1243
+ "description": "The `X-API-Key` header is missing or invalid.",
1244
+ "content": {
1245
+ "application/json": {
1246
+ "schema": {
1247
+ "$ref": "#/components/schemas/Error"
1248
+ },
1249
+ "example": {
1250
+ "success": false,
1251
+ "code": 401,
1252
+ "error": "unauthenticated"
1253
+ }
1254
+ }
1255
+ }
1256
+ },
1257
+ "NotFound": {
1258
+ "description": "The requested resource does not exist.",
1259
+ "content": {
1260
+ "application/json": {
1261
+ "schema": {
1262
+ "$ref": "#/components/schemas/Error"
1263
+ },
1264
+ "example": {
1265
+ "success": false,
1266
+ "code": 404,
1267
+ "error": "not found"
1268
+ }
1269
+ }
1270
+ }
1271
+ },
1272
+ "ServerError": {
1273
+ "description": "An unexpected error occurred on the server.",
1274
+ "content": {
1275
+ "application/json": {
1276
+ "schema": {
1277
+ "$ref": "#/components/schemas/Error"
1278
+ },
1279
+ "example": {
1280
+ "success": false,
1281
+ "code": 500,
1282
+ "error": "internal server error"
1283
+ }
1284
+ }
1285
+ }
1286
+ }
1287
+ },
1288
+ "schemas": {
1289
+ "Error": {
1290
+ "type": "object",
1291
+ "description": "Canonical error envelope returned by every endpoint on failure.",
1292
+ "properties": {
1293
+ "success": {
1294
+ "type": "boolean",
1295
+ "example": false
1296
+ },
1297
+ "code": {
1298
+ "type": "integer",
1299
+ "description": "HTTP status code echoed in the body.",
1300
+ "example": 400
1301
+ },
1302
+ "error": {
1303
+ "type": "string",
1304
+ "description": "Human-readable error message.",
1305
+ "example": "invalid request"
1306
+ }
1307
+ },
1308
+ "required": [
1309
+ "success",
1310
+ "error"
1311
+ ]
1312
+ },
1313
+ "SuccessEnvelope": {
1314
+ "type": "object",
1315
+ "description": "Wrapper carried by enveloped responses; the payload is in `data`.",
1316
+ "properties": {
1317
+ "success": {
1318
+ "type": "boolean",
1319
+ "example": true
1320
+ },
1321
+ "message": {
1322
+ "type": "string",
1323
+ "example": "operation completed successfully"
1324
+ }
1325
+ },
1326
+ "required": [
1327
+ "success"
1328
+ ]
1329
+ },
1330
+ "Pagination": {
1331
+ "type": "object",
1332
+ "properties": {
1333
+ "count": {
1334
+ "type": "integer",
1335
+ "description": "Number of items in this page.",
1336
+ "example": 20
1337
+ },
1338
+ "limit": {
1339
+ "type": "integer",
1340
+ "example": 50
1341
+ },
1342
+ "offset": {
1343
+ "type": "integer",
1344
+ "example": 0
1345
+ }
1346
+ }
1347
+ },
1348
+ "DestinationInput": {
1349
+ "type": "object",
1350
+ "description": "Where settlements for this UDA should be delivered.",
1351
+ "properties": {
1352
+ "address": {
1353
+ "type": "string",
1354
+ "description": "Destination wallet address.",
1355
+ "example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
1356
+ },
1357
+ "network_id": {
1358
+ "type": "string",
1359
+ "description": "Destination SLIP-44 network id.",
1360
+ "example": "60"
1361
+ },
1362
+ "asset_symbol": {
1363
+ "type": "string",
1364
+ "description": "Destination asset symbol.",
1365
+ "example": "USDC"
1366
+ }
1367
+ },
1368
+ "required": [
1369
+ "address",
1370
+ "network_id"
1371
+ ]
1372
+ },
1373
+ "RoutingRuleMatchInput": {
1374
+ "type": "object",
1375
+ "description": "Conditions a deposit must meet for this routing rule to apply.",
1376
+ "properties": {
1377
+ "source_network_id": {
1378
+ "type": "string",
1379
+ "example": "60"
1380
+ },
1381
+ "source_asset_symbol": {
1382
+ "type": "string",
1383
+ "example": "USDT"
1384
+ }
1385
+ },
1386
+ "required": [
1387
+ "source_network_id"
1388
+ ]
1389
+ },
1390
+ "RoutingRuleDestinationInput": {
1391
+ "type": "object",
1392
+ "properties": {
1393
+ "address": {
1394
+ "type": "string",
1395
+ "example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
1396
+ },
1397
+ "network_id": {
1398
+ "type": "string",
1399
+ "example": "60"
1400
+ },
1401
+ "asset_symbol": {
1402
+ "type": "string",
1403
+ "example": "USDC"
1404
+ }
1405
+ },
1406
+ "required": [
1407
+ "address",
1408
+ "network_id"
1409
+ ]
1410
+ },
1411
+ "RoutingRuleInput": {
1412
+ "type": "object",
1413
+ "properties": {
1414
+ "match": {
1415
+ "$ref": "#/components/schemas/RoutingRuleMatchInput"
1416
+ },
1417
+ "destination": {
1418
+ "$ref": "#/components/schemas/RoutingRuleDestinationInput"
1419
+ }
1420
+ },
1421
+ "required": [
1422
+ "match",
1423
+ "destination"
1424
+ ]
1425
+ },
1426
+ "CreateUDAAddressRequest": {
1427
+ "type": "object",
1428
+ "properties": {
1429
+ "owner": {
1430
+ "type": "string",
1431
+ "description": "The owner the UDA is allocated for.",
1432
+ "example": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432"
1433
+ },
1434
+ "destination": {
1435
+ "$ref": "#/components/schemas/DestinationInput"
1436
+ },
1437
+ "accepted_assets": {
1438
+ "type": "array",
1439
+ "items": {
1440
+ "type": "string"
1441
+ },
1442
+ "description": "Asset symbols this UDA accepts; empty means every asset on every UDA-supported chain.",
1443
+ "example": [
1444
+ "USDC",
1445
+ "USDT"
1446
+ ]
1447
+ },
1448
+ "routing_rules": {
1449
+ "type": "array",
1450
+ "items": {
1451
+ "$ref": "#/components/schemas/RoutingRuleInput"
1452
+ },
1453
+ "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"
1454
+ }
1455
+ },
1456
+ "required": [
1457
+ "owner",
1458
+ "destination"
1459
+ ],
1460
+ "example": {
1461
+ "owner": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432",
1462
+ "destination": {
1463
+ "address": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345",
1464
+ "network_id": "60",
1465
+ "asset_symbol": "USDC"
1466
+ },
1467
+ "accepted_assets": [
1468
+ "USDC",
1469
+ "USDT"
1470
+ ]
1471
+ }
1472
+ },
1473
+ "DepositAsset": {
1474
+ "type": "object",
1475
+ "properties": {
1476
+ "symbol": {
1477
+ "type": "string",
1478
+ "example": "USDC"
1479
+ },
1480
+ "address": {
1481
+ "type": "string",
1482
+ "description": "Token contract address (zero address for native).",
1483
+ "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
1484
+ },
1485
+ "decimals": {
1486
+ "type": "integer",
1487
+ "example": 6
1488
+ },
1489
+ "logo": {
1490
+ "type": "string",
1491
+ "example": "https://assets.stridge.com/tokens/usdc.png"
1492
+ }
1493
+ }
1494
+ },
1495
+ "DepositAddress": {
1496
+ "type": "object",
1497
+ "description": "A per-chain address a depositor can send funds to.",
1498
+ "properties": {
1499
+ "address": {
1500
+ "type": "string",
1501
+ "example": "0x7c2d9a1b3e4f5061728394a5b6c7d8e9f0a1b2c3"
1502
+ },
1503
+ "network_id": {
1504
+ "type": "string",
1505
+ "example": "60"
1506
+ },
1507
+ "eip155_id": {
1508
+ "type": "string",
1509
+ "example": "1"
1510
+ },
1511
+ "network_name": {
1512
+ "type": "string",
1513
+ "example": "Ethereum"
1514
+ },
1515
+ "accepted_assets": {
1516
+ "type": "array",
1517
+ "items": {
1518
+ "$ref": "#/components/schemas/DepositAsset"
1519
+ }
1520
+ }
1521
+ }
1522
+ },
1523
+ "Destination": {
1524
+ "type": "object",
1525
+ "description": "Resolved destination (symbol plus the resolved contract address).",
1526
+ "properties": {
1527
+ "address": {
1528
+ "type": "string",
1529
+ "example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
1530
+ },
1531
+ "network_id": {
1532
+ "type": "string",
1533
+ "example": "60"
1534
+ },
1535
+ "eip155_id": {
1536
+ "type": "string",
1537
+ "example": "1"
1538
+ },
1539
+ "network_name": {
1540
+ "type": "string",
1541
+ "example": "Ethereum"
1542
+ },
1543
+ "asset_symbol": {
1544
+ "type": "string",
1545
+ "example": "USDC"
1546
+ },
1547
+ "asset_address": {
1548
+ "type": "string",
1549
+ "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
1550
+ },
1551
+ "asset_decimals": {
594
1552
  "type": "integer",
595
- "example": 0
1553
+ "example": 6
596
1554
  }
597
1555
  }
598
1556
  },
599
- "DestinationInput": {
1557
+ "RoutingRuleMatch": {
1558
+ "type": "object",
1559
+ "properties": {
1560
+ "source_network_id": {
1561
+ "type": "string",
1562
+ "example": "60"
1563
+ },
1564
+ "source_asset_symbol": {
1565
+ "type": "string",
1566
+ "example": "USDT"
1567
+ },
1568
+ "source_token_address": {
1569
+ "type": "string",
1570
+ "example": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
1571
+ }
1572
+ }
1573
+ },
1574
+ "RoutingRuleDestination": {
1575
+ "type": "object",
1576
+ "properties": {
1577
+ "address": {
1578
+ "type": "string",
1579
+ "example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
1580
+ },
1581
+ "network_id": {
1582
+ "type": "string",
1583
+ "example": "60"
1584
+ },
1585
+ "eip155_id": {
1586
+ "type": "string",
1587
+ "example": "1"
1588
+ },
1589
+ "network_name": {
1590
+ "type": "string",
1591
+ "example": "Ethereum"
1592
+ },
1593
+ "asset_symbol": {
1594
+ "type": "string",
1595
+ "example": "USDC"
1596
+ },
1597
+ "asset_address": {
1598
+ "type": "string",
1599
+ "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
1600
+ },
1601
+ "asset_decimals": {
1602
+ "type": "integer",
1603
+ "example": 6
1604
+ }
1605
+ }
1606
+ },
1607
+ "RoutingRule": {
1608
+ "type": "object",
1609
+ "description": "An echoed routing rule in dual form (symbol plus resolved contract address).",
1610
+ "properties": {
1611
+ "match": {
1612
+ "$ref": "#/components/schemas/RoutingRuleMatch"
1613
+ },
1614
+ "destination": {
1615
+ "$ref": "#/components/schemas/RoutingRuleDestination"
1616
+ }
1617
+ }
1618
+ },
1619
+ "UDAAddress": {
1620
+ "type": "object",
1621
+ "properties": {
1622
+ "id": {
1623
+ "type": "string",
1624
+ "example": "uda_2f8c1a9d4e5f6071"
1625
+ },
1626
+ "owner": {
1627
+ "type": "string",
1628
+ "example": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432"
1629
+ },
1630
+ "status": {
1631
+ "type": "string",
1632
+ "enum": [
1633
+ "active",
1634
+ "retired"
1635
+ ],
1636
+ "example": "active"
1637
+ },
1638
+ "created_at": {
1639
+ "type": "string",
1640
+ "format": "date-time",
1641
+ "example": "2026-05-20T14:03:12Z"
1642
+ },
1643
+ "destination": {
1644
+ "$ref": "#/components/schemas/Destination"
1645
+ },
1646
+ "deposit_addresses": {
1647
+ "type": "array",
1648
+ "items": {
1649
+ "$ref": "#/components/schemas/DepositAddress"
1650
+ }
1651
+ },
1652
+ "routing_rules": {
1653
+ "type": "array",
1654
+ "description": "Empty when no rules are configured.",
1655
+ "items": {
1656
+ "$ref": "#/components/schemas/RoutingRule"
1657
+ }
1658
+ }
1659
+ }
1660
+ },
1661
+ "UDAAddressList": {
1662
+ "type": "object",
1663
+ "properties": {
1664
+ "data": {
1665
+ "type": "array",
1666
+ "items": {
1667
+ "$ref": "#/components/schemas/UDAAddress"
1668
+ }
1669
+ },
1670
+ "pagination": {
1671
+ "$ref": "#/components/schemas/Pagination"
1672
+ }
1673
+ }
1674
+ },
1675
+ "QuoteSide": {
1676
+ "type": "object",
1677
+ "properties": {
1678
+ "network_id": {
1679
+ "type": "integer",
1680
+ "description": "EIP-155 chain id for this side.",
1681
+ "example": 1
1682
+ },
1683
+ "asset_address": {
1684
+ "type": "string",
1685
+ "example": "0x0000000000000000000000000000000000000000"
1686
+ },
1687
+ "amount": {
1688
+ "type": "string",
1689
+ "description": "Amount in the asset's smallest unit.",
1690
+ "example": "1000000000000000000"
1691
+ }
1692
+ }
1693
+ },
1694
+ "QuoteFeeItem": {
1695
+ "type": "object",
1696
+ "properties": {
1697
+ "kind": {
1698
+ "type": "string",
1699
+ "example": "platform"
1700
+ },
1701
+ "amount": {
1702
+ "type": "string",
1703
+ "example": "2500000000000000"
1704
+ },
1705
+ "source": {
1706
+ "type": "string",
1707
+ "example": "stridge"
1708
+ },
1709
+ "recipient": {
1710
+ "type": "string",
1711
+ "example": "0xfee0000000000000000000000000000000000000"
1712
+ }
1713
+ }
1714
+ },
1715
+ "QuoteFees": {
1716
+ "type": "object",
1717
+ "properties": {
1718
+ "total_fee": {
1719
+ "type": "string",
1720
+ "example": "3500000000000000"
1721
+ },
1722
+ "gas_fee": {
1723
+ "type": "string",
1724
+ "example": "1000000000000000"
1725
+ },
1726
+ "network_reserve": {
1727
+ "type": "string",
1728
+ "description": "Chain-level reserve (e.g. TRON bandwidth).",
1729
+ "example": "0"
1730
+ },
1731
+ "platform_fee": {
1732
+ "type": "string",
1733
+ "example": "2500000000000000"
1734
+ },
1735
+ "provider_fee": {
1736
+ "type": "string",
1737
+ "description": "Third-party (e.g. LiFi / Relay) fee.",
1738
+ "example": "0"
1739
+ },
1740
+ "items": {
1741
+ "type": "array",
1742
+ "items": {
1743
+ "$ref": "#/components/schemas/QuoteFeeItem"
1744
+ }
1745
+ }
1746
+ }
1747
+ },
1748
+ "QuoteRoute": {
1749
+ "type": "object",
1750
+ "properties": {
1751
+ "provider": {
1752
+ "type": "string",
1753
+ "example": "lifi"
1754
+ },
1755
+ "scenario": {
1756
+ "type": "string",
1757
+ "example": "cross_chain_swap"
1758
+ },
1759
+ "estimated_time_seconds": {
1760
+ "type": "integer",
1761
+ "example": 45
1762
+ }
1763
+ }
1764
+ },
1765
+ "Quote": {
1766
+ "type": "object",
1767
+ "properties": {
1768
+ "from": {
1769
+ "$ref": "#/components/schemas/QuoteSide"
1770
+ },
1771
+ "to": {
1772
+ "$ref": "#/components/schemas/QuoteSide"
1773
+ },
1774
+ "exchange_rate": {
1775
+ "type": "string",
1776
+ "example": "0.9985"
1777
+ },
1778
+ "expires_at": {
1779
+ "type": "string",
1780
+ "format": "date-time",
1781
+ "example": "2026-05-29T12:05:00Z"
1782
+ },
1783
+ "fees": {
1784
+ "$ref": "#/components/schemas/QuoteFees"
1785
+ },
1786
+ "route": {
1787
+ "$ref": "#/components/schemas/QuoteRoute"
1788
+ }
1789
+ }
1790
+ },
1791
+ "SettlementDeposit": {
600
1792
  "type": "object",
601
- "description": "Where settlements for this UDA should be delivered.",
602
1793
  "properties": {
603
1794
  "address": {
604
1795
  "type": "string",
605
- "description": "Destination wallet address.",
606
- "example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
1796
+ "example": "0x7c2d9a1b3e4f5061728394a5b6c7d8e9f0a1b2c3"
607
1797
  },
608
- "network_id": {
1798
+ "amount": {
609
1799
  "type": "string",
610
- "description": "Destination SLIP-44 network id.",
611
- "example": "60"
1800
+ "example": "1000000"
612
1801
  },
613
1802
  "asset_symbol": {
614
1803
  "type": "string",
615
- "description": "Destination asset symbol.",
616
1804
  "example": "USDC"
617
- }
618
- },
619
- "required": [
620
- "address",
621
- "network_id"
622
- ]
623
- },
624
- "RoutingRuleMatchInput": {
625
- "type": "object",
626
- "description": "Conditions a deposit must meet for this routing rule to apply.",
627
- "properties": {
628
- "source_network_id": {
1805
+ },
1806
+ "asset_address": {
629
1807
  "type": "string",
630
- "example": "60"
1808
+ "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
631
1809
  },
632
- "source_asset_symbol": {
1810
+ "network_id": {
1811
+ "type": "integer",
1812
+ "example": 1
1813
+ },
1814
+ "network_name": {
633
1815
  "type": "string",
634
- "example": "USDT"
1816
+ "example": "Ethereum"
1817
+ },
1818
+ "tx_hash": {
1819
+ "type": "string",
1820
+ "example": "0xab12cd34ef56...7890"
1821
+ },
1822
+ "confirmed_at": {
1823
+ "type": "string",
1824
+ "format": "date-time",
1825
+ "example": "2026-05-29T11:58:40Z"
635
1826
  }
636
- },
637
- "required": [
638
- "source_network_id"
639
- ]
1827
+ }
640
1828
  },
641
- "RoutingRuleDestinationInput": {
1829
+ "SettlementOutbound": {
642
1830
  "type": "object",
643
1831
  "properties": {
644
1832
  "address": {
645
1833
  "type": "string",
646
1834
  "example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
647
1835
  },
648
- "network_id": {
1836
+ "amount": {
649
1837
  "type": "string",
650
- "example": "60"
1838
+ "example": "998500"
651
1839
  },
652
1840
  "asset_symbol": {
653
1841
  "type": "string",
654
1842
  "example": "USDC"
655
- }
656
- },
657
- "required": [
658
- "address",
659
- "network_id"
660
- ]
661
- },
662
- "RoutingRuleInput": {
663
- "type": "object",
664
- "properties": {
665
- "match": {
666
- "$ref": "#/components/schemas/RoutingRuleMatchInput"
667
1843
  },
668
- "destination": {
669
- "$ref": "#/components/schemas/RoutingRuleDestinationInput"
670
- }
671
- },
672
- "required": [
673
- "match",
674
- "destination"
675
- ]
676
- },
677
- "CreateUDAAddressRequest": {
678
- "type": "object",
679
- "properties": {
680
- "owner": {
1844
+ "asset_address": {
681
1845
  "type": "string",
682
- "description": "The owner the UDA is allocated for.",
683
- "example": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432"
1846
+ "example": "0x55d398326f99059fF775485246999027B3197955"
684
1847
  },
685
- "destination": {
686
- "$ref": "#/components/schemas/DestinationInput"
1848
+ "network_id": {
1849
+ "type": "integer",
1850
+ "example": 56
687
1851
  },
688
- "accepted_assets": {
689
- "type": "array",
690
- "items": {
691
- "type": "string"
692
- },
693
- "description": "Asset symbols this UDA accepts; empty means every asset on every UDA-supported chain.",
694
- "example": [
695
- "USDC",
696
- "USDT"
697
- ]
1852
+ "network_name": {
1853
+ "type": "string",
1854
+ "example": "BNB Smart Chain"
698
1855
  },
699
- "routing_rules": {
700
- "type": "array",
701
- "items": {
702
- "$ref": "#/components/schemas/RoutingRuleInput"
703
- },
704
- "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"
705
- }
706
- },
707
- "required": [
708
- "owner",
709
- "destination"
710
- ],
711
- "example": {
712
- "owner": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432",
713
- "destination": {
714
- "address": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345",
715
- "network_id": "60",
716
- "asset_symbol": "USDC"
1856
+ "tx_hash": {
1857
+ "type": "string",
1858
+ "example": "0xcd34ef5678...90ab"
717
1859
  },
718
- "accepted_assets": [
719
- "USDC",
720
- "USDT"
721
- ]
1860
+ "settled_at": {
1861
+ "type": "string",
1862
+ "format": "date-time",
1863
+ "example": "2026-05-29T11:59:25Z"
1864
+ }
722
1865
  }
723
1866
  },
724
- "DepositAsset": {
1867
+ "SettlementFees": {
725
1868
  "type": "object",
726
1869
  "properties": {
727
- "symbol": {
1870
+ "total": {
728
1871
  "type": "string",
729
- "example": "USDC"
1872
+ "example": "1500"
730
1873
  },
731
- "address": {
1874
+ "platform": {
732
1875
  "type": "string",
733
- "description": "Token contract address (zero address for native).",
734
- "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
1876
+ "example": "1500"
735
1877
  },
736
- "decimals": {
737
- "type": "integer",
738
- "example": 6
1878
+ "provider": {
1879
+ "type": "string",
1880
+ "example": "0"
739
1881
  },
740
- "logo": {
1882
+ "fee_amount": {
741
1883
  "type": "string",
742
- "example": "https://assets.stridge.com/tokens/usdc.png"
1884
+ "description": "Equal to `total` (back-compat field).",
1885
+ "example": "1500"
743
1886
  }
744
1887
  }
745
1888
  },
746
- "DepositAddress": {
1889
+ "SettlementRoute": {
747
1890
  "type": "object",
748
- "description": "A per-chain address a depositor can send funds to.",
749
1891
  "properties": {
750
- "address": {
751
- "type": "string",
752
- "example": "0x7c2d9a1b3e4f5061728394a5b6c7d8e9f0a1b2c3"
753
- },
754
- "network_id": {
755
- "type": "string",
756
- "example": "60"
757
- },
758
- "eip155_id": {
1892
+ "provider": {
759
1893
  "type": "string",
760
- "example": "1"
1894
+ "example": "lifi"
761
1895
  },
762
- "network_name": {
1896
+ "type": {
763
1897
  "type": "string",
764
- "example": "Ethereum"
1898
+ "example": "cross_chain_swap"
765
1899
  },
766
- "accepted_assets": {
767
- "type": "array",
768
- "items": {
769
- "$ref": "#/components/schemas/DepositAsset"
770
- }
1900
+ "time_ms": {
1901
+ "type": "integer",
1902
+ "example": 45000
771
1903
  }
772
1904
  }
773
1905
  },
774
- "Destination": {
1906
+ "Settlement": {
775
1907
  "type": "object",
776
- "description": "Resolved destination (symbol plus the resolved contract address).",
777
1908
  "properties": {
778
- "address": {
1909
+ "id": {
779
1910
  "type": "string",
780
- "example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
1911
+ "example": "stl_71829304a5b6c7d8"
781
1912
  },
782
- "network_id": {
1913
+ "uda_id": {
783
1914
  "type": "string",
784
- "example": "60"
1915
+ "example": "uda_2f8c1a9d4e5f6071"
785
1916
  },
786
- "eip155_id": {
1917
+ "status": {
787
1918
  "type": "string",
788
- "example": "1"
1919
+ "enum": [
1920
+ "created",
1921
+ "routing",
1922
+ "completed",
1923
+ "failed",
1924
+ "retrying"
1925
+ ],
1926
+ "example": "completed"
789
1927
  },
790
- "network_name": {
1928
+ "created_at": {
791
1929
  "type": "string",
792
- "example": "Ethereum"
1930
+ "format": "date-time",
1931
+ "example": "2026-05-29T11:58:41Z"
793
1932
  },
794
- "asset_symbol": {
1933
+ "updated_at": {
795
1934
  "type": "string",
796
- "example": "USDC"
1935
+ "format": "date-time",
1936
+ "example": "2026-05-29T11:59:25Z"
797
1937
  },
798
- "asset_address": {
1938
+ "error": {
799
1939
  "type": "string",
800
- "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
1940
+ "description": "Failure reason when `status` is `failed`; empty otherwise.",
1941
+ "example": ""
801
1942
  },
802
- "asset_decimals": {
1943
+ "deposit": {
1944
+ "$ref": "#/components/schemas/SettlementDeposit"
1945
+ },
1946
+ "settlement": {
1947
+ "$ref": "#/components/schemas/SettlementOutbound"
1948
+ },
1949
+ "fees": {
1950
+ "$ref": "#/components/schemas/SettlementFees"
1951
+ },
1952
+ "route": {
1953
+ "$ref": "#/components/schemas/SettlementRoute"
1954
+ }
1955
+ }
1956
+ },
1957
+ "SettlementList": {
1958
+ "type": "object",
1959
+ "properties": {
1960
+ "data": {
1961
+ "type": "array",
1962
+ "items": {
1963
+ "$ref": "#/components/schemas/Settlement"
1964
+ }
1965
+ },
1966
+ "pagination": {
1967
+ "$ref": "#/components/schemas/Pagination"
1968
+ }
1969
+ }
1970
+ },
1971
+ "SettlementsByReference": {
1972
+ "type": "object",
1973
+ "properties": {
1974
+ "reference": {
1975
+ "type": "string",
1976
+ "description": "The reference that was looked up.",
1977
+ "example": "0xab12cd34ef56...7890"
1978
+ },
1979
+ "count": {
803
1980
  "type": "integer",
804
- "example": 6
1981
+ "example": 1
1982
+ },
1983
+ "data": {
1984
+ "type": "array",
1985
+ "items": {
1986
+ "$ref": "#/components/schemas/Settlement"
1987
+ }
805
1988
  }
806
1989
  }
807
1990
  },
808
- "RoutingRuleMatch": {
1991
+ "NativeCurrency": {
809
1992
  "type": "object",
810
1993
  "properties": {
811
- "source_network_id": {
1994
+ "symbol": {
812
1995
  "type": "string",
813
- "example": "60"
1996
+ "example": "ETH"
814
1997
  },
815
- "source_asset_symbol": {
1998
+ "name": {
816
1999
  "type": "string",
817
- "example": "USDT"
2000
+ "example": "Ether"
818
2001
  },
819
- "source_token_address": {
2002
+ "decimals": {
2003
+ "type": "integer",
2004
+ "example": 18
2005
+ },
2006
+ "logo": {
820
2007
  "type": "string",
821
- "example": "0xdAC17F958D2ee523a2206206994597C13D831ec7"
2008
+ "example": "https://assets.stridge.com/tokens/eth.png"
2009
+ },
2010
+ "min_deposit_usd": {
2011
+ "type": "string",
2012
+ "example": "1.00"
2013
+ },
2014
+ "price_impact": {
2015
+ "type": "string",
2016
+ "example": "0"
822
2017
  }
823
2018
  }
824
2019
  },
825
- "RoutingRuleDestination": {
2020
+ "AssetInfo": {
826
2021
  "type": "object",
827
2022
  "properties": {
828
- "address": {
2023
+ "symbol": {
829
2024
  "type": "string",
830
- "example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
2025
+ "example": "USDC"
831
2026
  },
832
- "network_id": {
2027
+ "name": {
833
2028
  "type": "string",
834
- "example": "60"
2029
+ "example": "USD Coin"
835
2030
  },
836
- "eip155_id": {
2031
+ "address": {
837
2032
  "type": "string",
838
- "example": "1"
2033
+ "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
839
2034
  },
840
- "network_name": {
841
- "type": "string",
842
- "example": "Ethereum"
2035
+ "decimals": {
2036
+ "type": "integer",
2037
+ "example": 6
843
2038
  },
844
- "asset_symbol": {
2039
+ "logo": {
845
2040
  "type": "string",
846
- "example": "USDC"
2041
+ "example": "https://assets.stridge.com/tokens/usdc.png"
847
2042
  },
848
- "asset_address": {
2043
+ "min_deposit_usd": {
849
2044
  "type": "string",
850
- "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
2045
+ "example": "1.00"
851
2046
  },
852
- "asset_decimals": {
853
- "type": "integer",
854
- "example": 6
2047
+ "price_impact": {
2048
+ "type": "string",
2049
+ "example": "0"
855
2050
  }
856
2051
  }
857
2052
  },
858
- "RoutingRule": {
2053
+ "SupportedAssetChain": {
859
2054
  "type": "object",
860
- "description": "An echoed routing rule in dual form (symbol plus resolved contract address).",
861
2055
  "properties": {
862
- "match": {
863
- "$ref": "#/components/schemas/RoutingRuleMatch"
2056
+ "network_id": {
2057
+ "type": "string",
2058
+ "example": "60"
864
2059
  },
865
- "destination": {
866
- "$ref": "#/components/schemas/RoutingRuleDestination"
867
- }
868
- }
869
- },
870
- "UDAAddress": {
871
- "type": "object",
872
- "properties": {
873
- "id": {
2060
+ "network_name": {
874
2061
  "type": "string",
875
- "example": "uda_2f8c1a9d4e5f6071"
2062
+ "example": "Ethereum"
876
2063
  },
877
- "owner": {
2064
+ "network_symbol": {
878
2065
  "type": "string",
879
- "example": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432"
2066
+ "example": "ETH"
880
2067
  },
881
- "status": {
2068
+ "eip155_id": {
2069
+ "type": "integer",
2070
+ "example": 1
2071
+ },
2072
+ "chain_type": {
882
2073
  "type": "string",
883
2074
  "enum": [
884
- "active",
885
- "retired"
2075
+ "EVM",
2076
+ "TVM"
886
2077
  ],
887
- "example": "active"
888
- },
889
- "created_at": {
890
- "type": "string",
891
- "format": "date-time",
892
- "example": "2026-05-20T14:03:12Z"
893
- },
894
- "destination": {
895
- "$ref": "#/components/schemas/Destination"
2078
+ "example": "EVM"
896
2079
  },
897
- "deposit_addresses": {
898
- "type": "array",
899
- "items": {
900
- "$ref": "#/components/schemas/DepositAddress"
901
- }
2080
+ "native_currency": {
2081
+ "$ref": "#/components/schemas/NativeCurrency"
902
2082
  },
903
- "routing_rules": {
2083
+ "assets": {
904
2084
  "type": "array",
905
- "description": "Empty when no rules are configured.",
906
2085
  "items": {
907
- "$ref": "#/components/schemas/RoutingRule"
2086
+ "$ref": "#/components/schemas/AssetInfo"
908
2087
  }
909
2088
  }
910
2089
  }
911
2090
  },
912
- "UDAAddressList": {
2091
+ "SupportedAssetsResponse": {
913
2092
  "type": "object",
914
2093
  "properties": {
915
- "data": {
2094
+ "assets": {
916
2095
  "type": "array",
917
2096
  "items": {
918
- "$ref": "#/components/schemas/UDAAddress"
2097
+ "$ref": "#/components/schemas/SupportedAssetChain"
919
2098
  }
920
- },
921
- "pagination": {
922
- "$ref": "#/components/schemas/Pagination"
923
2099
  }
924
2100
  }
925
2101
  },
926
- "QuoteSide": {
2102
+ "PagePagination": {
927
2103
  "type": "object",
2104
+ "description": "Page-based pagination metadata returned by payout and gas-station list endpoints.",
928
2105
  "properties": {
929
- "network_id": {
2106
+ "page": {
930
2107
  "type": "integer",
931
- "description": "EIP-155 chain id for this side.",
932
2108
  "example": 1
933
2109
  },
934
- "asset_address": {
935
- "type": "string",
936
- "example": "0x0000000000000000000000000000000000000000"
2110
+ "limit": {
2111
+ "type": "integer",
2112
+ "example": 20
937
2113
  },
938
- "amount": {
939
- "type": "string",
940
- "description": "Amount in the asset's smallest unit.",
941
- "example": "1000000000000000000"
2114
+ "total_items": {
2115
+ "type": "integer",
2116
+ "example": 100
2117
+ },
2118
+ "total_pages": {
2119
+ "type": "integer",
2120
+ "example": 5
2121
+ },
2122
+ "has_next": {
2123
+ "type": "boolean",
2124
+ "example": true
2125
+ },
2126
+ "has_prev": {
2127
+ "type": "boolean",
2128
+ "example": false
942
2129
  }
943
2130
  }
944
2131
  },
945
- "QuoteFeeItem": {
2132
+ "MoneyValue": {
946
2133
  "type": "object",
2134
+ "description": "A single balance rendered in human, raw, and USD forms.",
947
2135
  "properties": {
948
- "kind": {
949
- "type": "string",
950
- "example": "platform"
951
- },
952
2136
  "amount": {
953
2137
  "type": "string",
954
- "example": "2500000000000000"
2138
+ "description": "Human-readable amount (already divided by decimals).",
2139
+ "example": "1.5"
955
2140
  },
956
- "source": {
2141
+ "raw": {
957
2142
  "type": "string",
958
- "example": "stridge"
2143
+ "description": "Amount in the asset's smallest unit.",
2144
+ "example": "1000000000000000000"
959
2145
  },
960
- "recipient": {
2146
+ "usd": {
961
2147
  "type": "string",
962
- "example": "0xfee0000000000000000000000000000000000000"
2148
+ "description": "Indicative USD value.",
2149
+ "example": "3500.00"
963
2150
  }
964
2151
  }
965
2152
  },
966
- "QuoteFees": {
2153
+ "Vault": {
967
2154
  "type": "object",
968
2155
  "properties": {
969
- "total_fee": {
970
- "type": "string",
971
- "example": "3500000000000000"
972
- },
973
- "gas_fee": {
974
- "type": "string",
975
- "example": "1000000000000000"
976
- },
977
- "network_reserve": {
978
- "type": "string",
979
- "description": "Chain-level reserve (e.g. TRON bandwidth).",
980
- "example": "0"
981
- },
982
- "platform_fee": {
2156
+ "id": {
983
2157
  "type": "string",
984
- "example": "2500000000000000"
2158
+ "example": "550e8400-e29b-41d4-a716-446655440000"
985
2159
  },
986
- "provider_fee": {
2160
+ "label": {
987
2161
  "type": "string",
988
- "description": "Third-party (e.g. LiFi / Relay) fee.",
989
- "example": "0"
990
- },
991
- "items": {
2162
+ "description": "Human-readable vault name.",
2163
+ "example": "hot"
2164
+ }
2165
+ }
2166
+ },
2167
+ "VaultList": {
2168
+ "type": "object",
2169
+ "properties": {
2170
+ "data": {
992
2171
  "type": "array",
993
2172
  "items": {
994
- "$ref": "#/components/schemas/QuoteFeeItem"
2173
+ "$ref": "#/components/schemas/Vault"
995
2174
  }
996
2175
  }
997
2176
  }
998
2177
  },
999
- "QuoteRoute": {
2178
+ "VaultAddress": {
1000
2179
  "type": "object",
1001
2180
  "properties": {
1002
- "provider": {
2181
+ "address": {
1003
2182
  "type": "string",
1004
- "example": "lifi"
2183
+ "example": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD58"
1005
2184
  },
1006
- "scenario": {
2185
+ "network_id": {
1007
2186
  "type": "string",
1008
- "example": "cross_chain_swap"
2187
+ "example": "60"
1009
2188
  },
1010
- "estimated_time_seconds": {
1011
- "type": "integer",
1012
- "example": 45
2189
+ "network_symbol": {
2190
+ "type": "string",
2191
+ "example": "ETH"
2192
+ },
2193
+ "created_at": {
2194
+ "type": "string",
2195
+ "format": "date-time",
2196
+ "example": "2024-01-01T00:00:00Z"
1013
2197
  }
1014
2198
  }
1015
2199
  },
1016
- "Quote": {
2200
+ "VaultAddressList": {
1017
2201
  "type": "object",
1018
2202
  "properties": {
1019
- "from": {
1020
- "$ref": "#/components/schemas/QuoteSide"
1021
- },
1022
- "to": {
1023
- "$ref": "#/components/schemas/QuoteSide"
1024
- },
1025
- "exchange_rate": {
1026
- "type": "string",
1027
- "example": "0.9985"
1028
- },
1029
- "expires_at": {
1030
- "type": "string",
1031
- "format": "date-time",
1032
- "example": "2026-05-29T12:05:00Z"
1033
- },
1034
- "fees": {
1035
- "$ref": "#/components/schemas/QuoteFees"
1036
- },
1037
- "route": {
1038
- "$ref": "#/components/schemas/QuoteRoute"
2203
+ "data": {
2204
+ "type": "object",
2205
+ "properties": {
2206
+ "addresses": {
2207
+ "type": "array",
2208
+ "items": {
2209
+ "$ref": "#/components/schemas/VaultAddress"
2210
+ }
2211
+ }
2212
+ }
1039
2213
  }
1040
2214
  }
1041
2215
  },
1042
- "SettlementDeposit": {
2216
+ "VaultAddressResponse": {
1043
2217
  "type": "object",
1044
2218
  "properties": {
1045
- "address": {
2219
+ "data": {
2220
+ "$ref": "#/components/schemas/VaultAddress"
2221
+ }
2222
+ }
2223
+ },
2224
+ "VaultBalance": {
2225
+ "type": "object",
2226
+ "properties": {
2227
+ "asset": {
1046
2228
  "type": "string",
1047
- "example": "0x7c2d9a1b3e4f5061728394a5b6c7d8e9f0a1b2c3"
2229
+ "example": "Ethereum"
1048
2230
  },
1049
- "amount": {
2231
+ "network_id": {
1050
2232
  "type": "string",
1051
- "example": "1000000"
2233
+ "example": "60"
1052
2234
  },
1053
- "asset_symbol": {
2235
+ "network_symbol": {
1054
2236
  "type": "string",
1055
- "example": "USDC"
2237
+ "example": "ETH"
1056
2238
  },
1057
- "asset_address": {
2239
+ "raw_value": {
1058
2240
  "type": "string",
1059
- "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
2241
+ "description": "Balance in the asset's smallest unit.",
2242
+ "example": "1000000000000000000"
1060
2243
  },
1061
- "network_id": {
2244
+ "raw_value_decimals": {
1062
2245
  "type": "integer",
1063
- "example": 1
1064
- },
1065
- "network_name": {
1066
- "type": "string",
1067
- "example": "Ethereum"
2246
+ "example": 18
1068
2247
  },
1069
- "tx_hash": {
2248
+ "display_values": {
2249
+ "$ref": "#/components/schemas/MoneyValue"
2250
+ }
2251
+ }
2252
+ },
2253
+ "VaultBalancesResponse": {
2254
+ "type": "object",
2255
+ "properties": {
2256
+ "data": {
2257
+ "type": "object",
2258
+ "properties": {
2259
+ "balances": {
2260
+ "type": "array",
2261
+ "items": {
2262
+ "$ref": "#/components/schemas/VaultBalance"
2263
+ }
2264
+ }
2265
+ }
2266
+ }
2267
+ }
2268
+ },
2269
+ "VaultTotal": {
2270
+ "type": "object",
2271
+ "properties": {
2272
+ "total_usd": {
1070
2273
  "type": "string",
1071
- "example": "0xab12cd34ef56...7890"
2274
+ "description": "Combined USD value of every asset in the vault.",
2275
+ "example": "25000.00"
1072
2276
  },
1073
- "confirmed_at": {
1074
- "type": "string",
1075
- "format": "date-time",
1076
- "example": "2026-05-29T11:58:40Z"
2277
+ "included_currency": {
2278
+ "type": "array",
2279
+ "items": {
2280
+ "type": "string"
2281
+ },
2282
+ "example": [
2283
+ "ETH",
2284
+ "USDT"
2285
+ ]
1077
2286
  }
1078
2287
  }
1079
2288
  },
1080
- "SettlementOutbound": {
2289
+ "VaultTotalResponse": {
1081
2290
  "type": "object",
1082
2291
  "properties": {
1083
- "address": {
2292
+ "data": {
2293
+ "$ref": "#/components/schemas/VaultTotal"
2294
+ }
2295
+ }
2296
+ },
2297
+ "CreatePayoutRequest": {
2298
+ "type": "object",
2299
+ "description": "A payout from a vault to an external address. Provide either `amount` or `usd_amount`, not both.\n",
2300
+ "properties": {
2301
+ "vault_id": {
1084
2302
  "type": "string",
1085
- "example": "0x3a1f8b2c9d4e5f60718293a4b5c6d7e8f9012345"
2303
+ "description": "The vault the funds leave from.",
2304
+ "example": "550e8400-e29b-41d4-a716-446655440001"
1086
2305
  },
1087
- "amount": {
2306
+ "asset": {
1088
2307
  "type": "string",
1089
- "example": "998500"
2308
+ "description": "Asset symbol to send.",
2309
+ "example": "USDT"
1090
2310
  },
1091
- "asset_symbol": {
2311
+ "network_symbol": {
1092
2312
  "type": "string",
1093
- "example": "USDC"
2313
+ "description": "Network slug.",
2314
+ "example": "ethereum"
1094
2315
  },
1095
- "asset_address": {
2316
+ "to_address": {
1096
2317
  "type": "string",
1097
- "example": "0x55d398326f99059fF775485246999027B3197955"
2318
+ "description": "External destination address.",
2319
+ "example": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B"
1098
2320
  },
1099
- "network_id": {
1100
- "type": "integer",
1101
- "example": 56
2321
+ "reference_id": {
2322
+ "type": "string",
2323
+ "description": "Your idempotency key — unique per vault.",
2324
+ "example": "order-12345"
1102
2325
  },
1103
- "network_name": {
2326
+ "amount": {
1104
2327
  "type": "string",
1105
- "example": "BNB Smart Chain"
2328
+ "description": "Crypto amount; provide either `amount` or `usd_amount`.",
2329
+ "example": "100.50"
1106
2330
  },
1107
- "tx_hash": {
2331
+ "usd_amount": {
1108
2332
  "type": "string",
1109
- "example": "0xcd34ef5678...90ab"
2333
+ "description": "USD amount; converted to crypto at the current rate.",
2334
+ "example": "50.00"
1110
2335
  },
1111
- "settled_at": {
2336
+ "remark": {
2337
+ "type": "string",
2338
+ "description": "Free-form note stored on the payout.",
2339
+ "example": "Payment for order #12345"
2340
+ },
2341
+ "expired_at": {
1112
2342
  "type": "string",
1113
2343
  "format": "date-time",
1114
- "example": "2026-05-29T11:59:25Z"
2344
+ "description": "Cutoff after which a non-confirmed payout expires.",
2345
+ "example": "2026-12-31T23:59:59Z"
1115
2346
  }
2347
+ },
2348
+ "required": [
2349
+ "vault_id",
2350
+ "asset",
2351
+ "network_symbol",
2352
+ "to_address",
2353
+ "reference_id"
2354
+ ],
2355
+ "example": {
2356
+ "vault_id": "550e8400-e29b-41d4-a716-446655440001",
2357
+ "asset": "USDT",
2358
+ "network_symbol": "ethereum",
2359
+ "to_address": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
2360
+ "reference_id": "order-12345",
2361
+ "amount": "100.50",
2362
+ "remark": "Payment for order #12345",
2363
+ "expired_at": "2026-12-31T23:59:59Z"
1116
2364
  }
1117
2365
  },
1118
- "SettlementFees": {
2366
+ "Payout": {
1119
2367
  "type": "object",
1120
2368
  "properties": {
1121
- "total": {
2369
+ "id": {
1122
2370
  "type": "string",
1123
- "example": "1500"
2371
+ "example": "550e8400-e29b-41d4-a716-446655440000"
1124
2372
  },
1125
- "platform": {
2373
+ "vault_id": {
1126
2374
  "type": "string",
1127
- "example": "1500"
2375
+ "example": "550e8400-e29b-41d4-a716-446655440001"
1128
2376
  },
1129
- "provider": {
2377
+ "asset": {
1130
2378
  "type": "string",
1131
- "example": "0"
2379
+ "example": "USDT"
1132
2380
  },
1133
- "fee_amount": {
2381
+ "network_symbol": {
1134
2382
  "type": "string",
1135
- "description": "Equal to `total` (back-compat field).",
1136
- "example": "1500"
1137
- }
1138
- }
1139
- },
1140
- "SettlementRoute": {
1141
- "type": "object",
1142
- "properties": {
1143
- "provider": {
2383
+ "example": "ethereum"
2384
+ },
2385
+ "amount": {
1144
2386
  "type": "string",
1145
- "example": "lifi"
2387
+ "description": "Crypto amount sent.",
2388
+ "example": "100.50"
1146
2389
  },
1147
- "type": {
2390
+ "usd_amount": {
1148
2391
  "type": "string",
1149
- "example": "cross_chain_swap"
2392
+ "description": "USD value at submit time.",
2393
+ "example": "100.50"
1150
2394
  },
1151
- "time_ms": {
1152
- "type": "integer",
1153
- "example": 45000
1154
- }
1155
- }
1156
- },
1157
- "Settlement": {
1158
- "type": "object",
1159
- "properties": {
1160
- "id": {
2395
+ "rate": {
1161
2396
  "type": "string",
1162
- "example": "stl_71829304a5b6c7d8"
2397
+ "description": "Conversion rate applied when `usd_amount` was used.",
2398
+ "example": "1.0001"
1163
2399
  },
1164
- "uda_id": {
2400
+ "to_address": {
1165
2401
  "type": "string",
1166
- "example": "uda_2f8c1a9d4e5f6071"
2402
+ "example": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B"
2403
+ },
2404
+ "reference_id": {
2405
+ "type": "string",
2406
+ "example": "order-12345"
2407
+ },
2408
+ "remark": {
2409
+ "type": "string",
2410
+ "example": "Payment for order #12345"
1167
2411
  },
1168
2412
  "status": {
1169
2413
  "type": "string",
1170
2414
  "enum": [
1171
- "created",
1172
- "routing",
1173
- "completed",
2415
+ "queued",
2416
+ "processing",
2417
+ "confirmed",
1174
2418
  "failed",
1175
- "retrying"
2419
+ "expired"
1176
2420
  ],
1177
- "example": "completed"
1178
- },
1179
- "created_at": {
1180
- "type": "string",
1181
- "format": "date-time",
1182
- "example": "2026-05-29T11:58:41Z"
2421
+ "example": "confirmed"
1183
2422
  },
1184
- "updated_at": {
2423
+ "tx_id": {
1185
2424
  "type": "string",
1186
- "format": "date-time",
1187
- "example": "2026-05-29T11:59:25Z"
2425
+ "description": "On-chain transaction hash; empty until broadcast.",
2426
+ "example": "0xabc123def456789"
1188
2427
  },
1189
2428
  "error": {
1190
2429
  "type": "string",
1191
2430
  "description": "Failure reason when `status` is `failed`; empty otherwise.",
1192
2431
  "example": ""
1193
2432
  },
1194
- "deposit": {
1195
- "$ref": "#/components/schemas/SettlementDeposit"
1196
- },
1197
- "settlement": {
1198
- "$ref": "#/components/schemas/SettlementOutbound"
2433
+ "created_at": {
2434
+ "type": "string",
2435
+ "format": "date-time",
2436
+ "example": "2026-01-01T00:00:00Z"
1199
2437
  },
1200
- "fees": {
1201
- "$ref": "#/components/schemas/SettlementFees"
2438
+ "confirmed_at": {
2439
+ "type": "string",
2440
+ "format": "date-time",
2441
+ "example": "2026-01-01T00:05:00Z"
1202
2442
  },
1203
- "route": {
1204
- "$ref": "#/components/schemas/SettlementRoute"
2443
+ "expired_at": {
2444
+ "type": "string",
2445
+ "format": "date-time",
2446
+ "example": "2026-12-31T23:59:59Z"
1205
2447
  }
1206
2448
  }
1207
2449
  },
1208
- "SettlementList": {
2450
+ "PayoutResponse": {
1209
2451
  "type": "object",
1210
2452
  "properties": {
1211
2453
  "data": {
1212
- "type": "array",
1213
- "items": {
1214
- "$ref": "#/components/schemas/Settlement"
1215
- }
1216
- },
1217
- "pagination": {
1218
- "$ref": "#/components/schemas/Pagination"
2454
+ "$ref": "#/components/schemas/Payout"
1219
2455
  }
1220
2456
  }
1221
2457
  },
1222
- "SettlementsByReference": {
2458
+ "PayoutList": {
1223
2459
  "type": "object",
1224
2460
  "properties": {
1225
- "reference": {
1226
- "type": "string",
1227
- "description": "The reference that was looked up.",
1228
- "example": "0xab12cd34ef56...7890"
1229
- },
1230
- "count": {
1231
- "type": "integer",
1232
- "example": 1
1233
- },
1234
2461
  "data": {
1235
2462
  "type": "array",
1236
2463
  "items": {
1237
- "$ref": "#/components/schemas/Settlement"
2464
+ "$ref": "#/components/schemas/Payout"
1238
2465
  }
2466
+ },
2467
+ "pagination": {
2468
+ "$ref": "#/components/schemas/PagePagination"
1239
2469
  }
1240
2470
  }
1241
2471
  },
1242
- "NativeCurrency": {
2472
+ "GasStationBalance": {
1243
2473
  "type": "object",
1244
2474
  "properties": {
1245
- "symbol": {
2475
+ "asset": {
1246
2476
  "type": "string",
1247
- "example": "ETH"
2477
+ "example": "Ethereum"
1248
2478
  },
1249
- "name": {
2479
+ "symbol": {
1250
2480
  "type": "string",
1251
- "example": "Ether"
2481
+ "example": "ETH"
1252
2482
  },
1253
- "decimals": {
2483
+ "decimal": {
1254
2484
  "type": "integer",
1255
2485
  "example": 18
1256
2486
  },
1257
- "logo": {
2487
+ "network_id": {
1258
2488
  "type": "string",
1259
- "example": "https://assets.stridge.com/tokens/eth.png"
2489
+ "example": "60"
1260
2490
  },
1261
- "min_deposit_usd": {
2491
+ "network_symbol": {
1262
2492
  "type": "string",
1263
- "example": "1.00"
2493
+ "example": "ETH"
1264
2494
  },
1265
- "price_impact": {
1266
- "type": "string",
1267
- "example": "0"
2495
+ "balance": {
2496
+ "$ref": "#/components/schemas/MoneyValue"
1268
2497
  }
1269
2498
  }
1270
2499
  },
1271
- "AssetInfo": {
2500
+ "GasStation": {
1272
2501
  "type": "object",
1273
2502
  "properties": {
1274
- "symbol": {
1275
- "type": "string",
1276
- "example": "USDC"
1277
- },
1278
- "name": {
2503
+ "id": {
1279
2504
  "type": "string",
1280
- "example": "USD Coin"
2505
+ "example": "550e8400-e29b-41d4-a716-446655440000"
1281
2506
  },
1282
2507
  "address": {
1283
2508
  "type": "string",
1284
- "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
1285
- },
1286
- "decimals": {
1287
- "type": "integer",
1288
- "example": 6
2509
+ "example": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD58"
1289
2510
  },
1290
- "logo": {
2511
+ "network_id": {
1291
2512
  "type": "string",
1292
- "example": "https://assets.stridge.com/tokens/usdc.png"
2513
+ "example": "60"
1293
2514
  },
1294
- "min_deposit_usd": {
2515
+ "network_symbol": {
1295
2516
  "type": "string",
1296
- "example": "1.00"
2517
+ "example": "ETH"
1297
2518
  },
1298
- "price_impact": {
1299
- "type": "string",
1300
- "example": "0"
2519
+ "balances": {
2520
+ "type": "array",
2521
+ "items": {
2522
+ "$ref": "#/components/schemas/GasStationBalance"
2523
+ }
1301
2524
  }
1302
2525
  }
1303
2526
  },
1304
- "SupportedAssetChain": {
2527
+ "GasStationResponse": {
1305
2528
  "type": "object",
1306
2529
  "properties": {
1307
- "network_id": {
2530
+ "data": {
2531
+ "$ref": "#/components/schemas/GasStation"
2532
+ }
2533
+ }
2534
+ },
2535
+ "GasStationWallet": {
2536
+ "type": "object",
2537
+ "properties": {
2538
+ "id": {
1308
2539
  "type": "string",
1309
- "example": "60"
2540
+ "example": "550e8400-e29b-41d4-a716-446655440000"
1310
2541
  },
1311
- "network_name": {
2542
+ "address": {
1312
2543
  "type": "string",
1313
- "example": "Ethereum"
2544
+ "example": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD58"
2545
+ },
2546
+ "network_id": {
2547
+ "type": "string",
2548
+ "example": "60"
1314
2549
  },
1315
2550
  "network_symbol": {
1316
2551
  "type": "string",
1317
2552
  "example": "ETH"
1318
2553
  },
1319
- "eip155_id": {
1320
- "type": "integer",
1321
- "example": 1
1322
- },
1323
- "chain_type": {
2554
+ "created_at": {
1324
2555
  "type": "string",
1325
- "enum": [
1326
- "EVM",
1327
- "TVM"
1328
- ],
1329
- "example": "EVM"
1330
- },
1331
- "native_currency": {
1332
- "$ref": "#/components/schemas/NativeCurrency"
1333
- },
1334
- "assets": {
1335
- "type": "array",
1336
- "items": {
1337
- "$ref": "#/components/schemas/AssetInfo"
1338
- }
2556
+ "format": "date-time",
2557
+ "example": "2024-01-01T00:00:00Z"
1339
2558
  }
1340
2559
  }
1341
2560
  },
1342
- "SupportedAssetsResponse": {
2561
+ "GasStationWalletList": {
1343
2562
  "type": "object",
1344
2563
  "properties": {
1345
- "assets": {
2564
+ "data": {
1346
2565
  "type": "array",
1347
2566
  "items": {
1348
- "$ref": "#/components/schemas/SupportedAssetChain"
2567
+ "$ref": "#/components/schemas/GasStationWallet"
1349
2568
  }
2569
+ },
2570
+ "pagination": {
2571
+ "$ref": "#/components/schemas/PagePagination"
1350
2572
  }
1351
2573
  }
1352
2574
  }