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