SnapTrade.Net
3.5.0
See the version list below for details.
dotnet add package SnapTrade.Net --version 3.5.0
NuGet\Install-Package SnapTrade.Net -Version 3.5.0
<PackageReference Include="SnapTrade.Net" Version="3.5.0" />
paket add SnapTrade.Net --version 3.5.0
#r "nuget: SnapTrade.Net, 3.5.0"
// Install SnapTrade.Net as a Cake Addin
#addin nuget:?package=SnapTrade.Net&version=3.5.0
// Install SnapTrade.Net as a Cake Tool
#tool nuget:?package=SnapTrade.Net&version=3.5.0
SnapTrade.Net - the C# library for the SnapTrade
Connect brokerage accounts to your app for live positions and trading
This C# SDK is automatically generated by the Konfig:
- API version: 1.0.0
- SDK version: 3.5.0
Frameworks supported
- .NET Core >=1.0
- .NET Framework >=4.6
- Mono/Xamarin >=vNext
Dependencies
- RestSharp - 106.13.0 or later
- Json.NET - 13.0.1 or later
- JsonSubTypes - 1.8.0 or later
- System.ComponentModel.Annotations - 5.0.0 or later
The DLLs included in the package may not be the latest version. We recommend using NuGet to obtain the latest version of the packages:
Install-Package RestSharp
Install-Package Newtonsoft.Json
Install-Package JsonSubTypes
Install-Package System.ComponentModel.Annotations
NOTE: RestSharp versions greater than 105.1.0 have a bug which causes file uploads to fail. See RestSharp#742. NOTE: RestSharp for .Net Core creates a new socket for each api call, which can lead to a socket exhaustion problem. See RestSharp#1406.
Installation
Generate the DLL using your preferred tool (e.g. dotnet build
)
Then include the DLL (under the bin
folder) in the C# project, and use the namespaces:
using SnapTrade.Net.Api;
using SnapTrade.Net.Client;
using SnapTrade.Net.Model;
Usage
To use the API client with a HTTP proxy, setup a System.Net.WebProxy
Configuration c = new Configuration();
System.Net.WebProxy webProxy = new System.Net.WebProxy("http://myProxyUrl:80/");
webProxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
c.Proxy = webProxy;
Getting Started
using System;
using System.Collections.Generic;
using System.Diagnostics;
using SnapTrade.Net.Api;
using SnapTrade.Net.Client;
using SnapTrade.Net.Model;
namespace Example
{
public class AcceptExample
{
public static void Main()
{
Configuration config = new Configuration();
// Configure custom BasePath if desired
// config.BasePath = "https://api.snaptrade.com/api/v1";
config.ApiKey.Add("clientId", System.Environment.GetEnvironmentVariable("SNAPTRADE_CLIENT_ID"));
config.ConsumerKey = System.Environment.GetEnvironmentVariable("SNAPTRADE_CONSUMER_KEY");
var apiInstance = new APIDisclaimerApi(config);
var userId = "userId_example"; // string |
var userSecret = "userSecret_example"; // string |
var aPIDisclaimerAcceptRequest = new APIDisclaimerAcceptRequest(); // APIDisclaimerAcceptRequest |
try
{
// Accept or Reject SnapTrade disclaimer agreement
SnapTradeAPIDisclaimerAcceptStatus result = apiInstance.Accept(userId, userSecret, aPIDisclaimerAcceptRequest);
Console.WriteLine(result);
}
catch (ApiException e)
{
Console.WriteLine("Exception when calling APIDisclaimerApi.Accept: " + e.Message);
Console.WriteLine("Status Code: "+ e.ErrorCode);
Console.WriteLine(e.StackTrace);
}
catch (ClientException e)
{
Console.WriteLine(e.Response.StatusCode);
Console.WriteLine(e.Response.RawContent);
Console.WriteLine(e.InnerException);
}
}
}
}
Documentation for API Endpoints
All URIs are relative to https://api.snaptrade.com/api/v1
Class | Method | HTTP request | Description |
---|---|---|---|
APIDisclaimerApi | Accept | POST /snapTrade/acceptDisclaimer | Accept or Reject SnapTrade disclaimer agreement |
APIStatusApi | Check | GET / | Get API Status |
AccountInformationApi | GetAllUserHoldings | GET /holdings | List all accounts for the user, plus balances and positions for each account. |
AccountInformationApi | GetUserAccountBalance | GET /accounts/{accountId}/balances | Get all cash balances of an investment account |
AccountInformationApi | GetUserAccountDetails | GET /accounts/{accountId} | Return details of a specific investment account |
AccountInformationApi | GetUserAccountOrders | GET /accounts/{accountId}/orders | Get all history of orders placed in account |
AccountInformationApi | GetUserAccountPositions | GET /accounts/{accountId}/positions | Get all positions of an investment account |
AccountInformationApi | GetUserHoldings | GET /accounts/{accountId}/holdings | List balances, positions and orders for the specified account. |
AccountInformationApi | ListUserAccounts | GET /accounts | List all investment accounts for the user |
AccountInformationApi | UpdateUserAccount | PUT /accounts/{accountId} | Update details of an investment account |
AuthenticationApi | DeleteSnapTradeUser | DELETE /snapTrade/deleteUser | Delete user from SnapTrade, disabling all brokerage authorizations and permanently deleting all data associated with the user |
AuthenticationApi | GetUserJWT | GET /snapTrade/encryptedJWT | Obtains an encrypted JWT tokens that should be decrypted on a user's local device |
AuthenticationApi | ListSnapTradeUsers | GET /snapTrade/listUsers | Get a list of all SnapTrade users you've registered on our platform |
AuthenticationApi | LoginSnapTradeUser | POST /snapTrade/login | Generate a redirect URI to securely login a user to the SnapTrade Connection Portal |
AuthenticationApi | RegisterSnapTradeUser | POST /snapTrade/registerUser | Register user with SnapTrade in order to create secure brokerage authorizations |
ConnectionsApi | DetailBrokerageAuthorization | GET /authorizations/{authorizationId} | Get detail of a specific brokerage authorizations for the user |
ConnectionsApi | ListBrokerageAuthorizations | GET /authorizations | List all brokerage authorizations for the user |
ConnectionsApi | RemoveBrokerageAuthorization | DELETE /authorizations/{authorizationId} | Remove a brokerage authorization. |
ConnectionsApi | SessionEvents | GET /sessionEvents | List all session events for the partner |
ErrorLogsApi | ListUserErrors | GET /snapTrade/listUserErrors | Retrieve error logs on behalf of your SnapTrade users |
OptionsApi | GetOptionStrategy | POST /accounts/{accountId}/optionStrategy | Creates an option strategy object that will be used to place an option strategy order |
OptionsApi | GetOptionsChain | GET /accounts/{accountId}/optionsChain | Get the options chain |
OptionsApi | GetOptionsStrategyQuote | GET /accounts/{accountId}/optionStrategy/{optionStrategyId} | Get latest market data of option strategy |
OptionsApi | ListOptionHoldings | GET /accounts/{accountId}/options | Get the options holdings in the account |
OptionsApi | PlaceOptionStrategy | POST /accounts/{accountId}/optionStrategy/{optionStrategyId}/execute | Place an option strategy order on the brokerage |
PortfolioManagementApi | AddPortfolioExcludedAsset | POST /portfolioGroups/{portfolioGroupId}/excludedassets | Adds an asset to exclude to a portfolio group |
PortfolioManagementApi | Create | POST /portfolioGroups | Create new portfolio group |
PortfolioManagementApi | CreateAssetClass | POST /modelAssetClass | Create a new model asset class |
PortfolioManagementApi | CreateModelPortfolio | POST /modelPortfolio | Creates a new model portfolio |
PortfolioManagementApi | DeleteAssetClass | DELETE /modelAssetClass/{modelAssetClassId} | Deletes a model asset class |
PortfolioManagementApi | DeleteExcludedAsset | DELETE /portfolioGroups/{portfolioGroupId}/excludedassets/{symbolId} | Unexclude an asset from a portfolio group |
PortfolioManagementApi | DeleteModelPortfolioById | DELETE /modelPortfolio/{modelPortfolioId} | Deletes a model portfolio |
PortfolioManagementApi | DeletePortfoli | DELETE /portfolioGroups/{portfolioGroupId} | Remove a target portfolio. |
PortfolioManagementApi | DeletePortfolioTargetById | DELETE /portfolioGroups/{portfolioGroupId}/targets/{targetAssetId} | Remove a TargetAsset. |
PortfolioManagementApi | DetailAssetClass | GET /modelAssetClass/{modelAssetClassId} | Get details of a model asset class |
PortfolioManagementApi | GetCalculatedTradeById | GET /portfolioGroups/{portfolioGroupId}/calculatedtrades/{calculatedTradeId}/{TradeId} | Return an individual trade |
PortfolioManagementApi | GetModelDetailsById | GET /modelPortfolio/{modelPortfolioId} | Get details of a model portfolio |
PortfolioManagementApi | GetPortfolioBalances | GET /portfolioGroups/{portfolioGroupId}/balances | Get sum of cash balances in portfolio group |
PortfolioManagementApi | GetPortfolioDetailsById | GET /portfolioGroups/{portfolioGroupId} | Get details of a target portfolio |
PortfolioManagementApi | GetPortfolioInfo | GET /portfolioGroups/{portfolioGroupId}/info | Return a whole bunch of relevant information relating to a portfolio group. |
PortfolioManagementApi | GetPortfolioPositions | GET /portfolioGroups/{portfolioGroupId}/positions | Get total of each postions owned in portfolio group |
PortfolioManagementApi | GetPortfolioSettings | GET /portfolioGroups/{portfolioGroupId}/settings | Get portfolio group settings |
PortfolioManagementApi | GetPortfolioTargetById | GET /portfolioGroups/{portfolioGroupId}/targets/{targetAssetId} | Get a specific target from a portfolio group |
PortfolioManagementApi | GetPortfolioTargets | GET /portfolioGroups/{portfolioGroupId}/targets | Get all target assets under the specified PortfolioGroup. |
PortfolioManagementApi | GetPortoflioExcludedAssets | GET /portfolioGroups/{portfolioGroupId}/excludedassets | Get an array of excluded assets associated with a portfolio group\ |
PortfolioManagementApi | ImportModelPortfolio | POST /portfolioGroups/{portfolioGroupId}/import | Import target allocation based on portfolio group |
PortfolioManagementApi | List | GET /portfolioGroups | List all portfolio groups |
PortfolioManagementApi | ListAssetClasses | GET /modelAssetClass | List of model asset class |
PortfolioManagementApi | ListCalculatedTrades | GET /portfolioGroups/{portfolioGroupId}/calculatedtrades | List of trades to make to rebalance portfolio group |
PortfolioManagementApi | ListModelPortfolio | GET /modelPortfolio | List of model portfolio |
PortfolioManagementApi | ListPortfolioAccounts | GET /portfolioGroups/{portfolioGroupId}/accounts | Get all accounts associated with a portfolio group |
PortfolioManagementApi | ModifyModelPortfolioById | POST /modelPortfolio/{modelPortfolioId} | Updates model portfolio object |
PortfolioManagementApi | SavePortfolio | PATCH /portfolioGroups/{portfolioGroupId} | Update an existing target portfolio. |
PortfolioManagementApi | SearchPortfolioSymbols | POST /portfolioGroups/{portfolioGroupId}/symbols | Search for symbols limited to brokerages under the specified portfolio group |
PortfolioManagementApi | SetPortfolioTargets | POST /portfolioGroups/{portfolioGroupId}/targets | Set a new list of target assets under the specified PortfolioGroup. All existing target assets under this portfolio group will be replaced with the new list. |
PortfolioManagementApi | UpdateAssetClass | POST /modelAssetClass/{modelAssetClassId} | Updates model asset class objects |
PortfolioManagementApi | UpdatePortfolioSettings | PATCH /portfolioGroups/{portfolioGroupId}/settings | Updates portfolio group settings |
PortfolioManagementApi | UpdatePortfolioTargetById | PATCH /portfolioGroups/{portfolioGroupId}/targets/{targetAssetId} | Update a TargetAsset under the specified PortfolioGroup. |
ReferenceDataApi | GetCurrencyExchangeRatePair | GET /currencies/rates/{currencyPair} | Return the exchange rate of a currency pair |
ReferenceDataApi | GetPartnerInfo | GET /snapTrade/partners | Get metadata related to Snaptrade partner |
ReferenceDataApi | GetSecurityTypes | GET /securityTypes | List of all security types. |
ReferenceDataApi | GetStockExchanges | GET /exchanges | Return list of stock exchanges on Passiv and their suffixes |
ReferenceDataApi | GetSymbols | POST /symbols | Search for symbols |
ReferenceDataApi | GetSymbolsByTicker | GET /symbols/{ticker} | Get details of a symbol by the ticker |
ReferenceDataApi | ListAllBrokerageAuthorizationType | GET /brokerageAuthorizationTypes | List of all brokerage authorization types |
ReferenceDataApi | ListAllBrokerages | GET /brokerages | List of all brokerages. |
ReferenceDataApi | ListAllCurrencies | GET /currencies | List of all supported currencies |
ReferenceDataApi | ListAllCurrenciesRates | GET /currencies/rates | Return the exchange rates of all supported currencies |
ReferenceDataApi | SymbolSearchUserAccount | POST /accounts/{accountId}/symbols | Search for symbols that are supported by a brokerage account using a substring |
TradingApi | CancelUserAccountOrder | POST /accounts/{accountId}/orders/cancel | Cancel open order in account |
TradingApi | GetCalculatedTradeImpactById | GET /portfolioGroups/{portfolioGroupId}/calculatedtrades/{calculatedTradeId}/modify/{tradeId} | Return details of a specific trade before it's placed |
TradingApi | GetCalculatedTradesImpact | GET /portfolioGroups/{portfolioGroupId}/calculatedtrades/{calculatedTradeId}/impact | Return the impact of placing a series of trades on the portfolio |
TradingApi | GetOrderImpact | POST /trade/impact | Check impact of trades on account. |
TradingApi | GetUserAccountQuotes | GET /accounts/{accountId}/quotes | Get symbol quotes |
TradingApi | ModifyCalculatedTradeById | PATCH /portfolioGroups/{portfolioGroupId}/calculatedtrades/{calculatedTradeId}/modify/{tradeId} | Modify units of a trade before it is placed |
TradingApi | PlaceCalculatedTrades | POST /portfolioGroups/{portfolioGroupId}/calculatedtrades/{calculatedTradeId}/placeOrders | Place orders for the CalculatedTrades in series |
TradingApi | PlaceForceOrder | POST /trade/place | Place a trade with NO validation. |
TradingApi | PlaceOCOOrder | POST /trade/oco | Place a OCO (One Cancels Other) order |
TradingApi | PlaceOrder | POST /trade/{tradeId} | Place order |
TransactionsAndReportingApi | GetActivities | GET /activities | Get transaction history for a user |
TransactionsAndReportingApi | GetReportingCustomRange | GET /performance/custom | Get performance information for a specific timeframe |
Documentation for Models
- Model.APIDisclaimerAcceptRequest
- Model.Account
- Model.AccountHoldings
- Model.AccountOrderRecord
- Model.AccountOrderRecordStatus
- Model.AccountSimple
- Model.AccountSyncStatus
- Model.Action
- Model.AuthenticationLoginSnapTradeUser200Response
- Model.Balance
- Model.Brokerage
- Model.BrokerageAuthorization
- Model.BrokerageAuthorizationType
- Model.BrokerageAuthorizationTypeReadOnly
- Model.BrokerageAuthorizationTypeReadOnlyBrokerage
- Model.BrokerageSymbol
- Model.BrokerageType
- Model.CalculatedTrade
- Model.CashRestriction
- Model.ConnectionsSessionEvents200ResponseInner
- Model.Currency
- Model.DeleteUserResponse
- Model.DividendAtDate
- Model.EncryptedResponse
- Model.EncryptedResponseEncryptedMessageData
- Model.Exchange
- Model.ExchangeRatePairs
- Model.ExcludedAsset
- Model.JWT
- Model.LoginRedirectURI
- Model.ManualTrade
- Model.ManualTradeAndImpact
- Model.ManualTradeBalance
- Model.ManualTradeForm
- Model.ManualTradeSymbol
- Model.Model400FailedRequestResponse
- Model.Model401FailedRequestResponse
- Model.Model403FailedRequestResponse
- Model.Model404FailedRequestResponse
- Model.ModelAssetClass
- Model.ModelAssetClassDetails
- Model.ModelAssetClassTarget
- Model.ModelPortfolio
- Model.ModelPortfolioAssetClass
- Model.ModelPortfolioDetails
- Model.ModelPortfolioSecurity
- Model.MonthlyDividends
- Model.NetContributions
- Model.NetDividend
- Model.OptionChainInner
- Model.OptionChainInnerChainPerRootInner
- Model.OptionChainInnerChainPerRootInnerChainPerStrikePriceInner
- Model.OptionLeg
- Model.OptionStrategy
- Model.OptionStrategyLegsInner
- Model.OptionsGetOptionStrategyRequest
- Model.OptionsHoldings
- Model.OptionsPlaceOptionStrategyRequest
- Model.OptionsPosition
- Model.OptionsSymbol
- Model.OrderType
- Model.PartnerData
- Model.PastValue
- Model.PerformanceCustom
- Model.PortfolioGroup
- Model.PortfolioGroupInfo
- Model.PortfolioGroupPosition
- Model.PortfolioGroupSettings
- Model.Position
- Model.PositionSymbol
- Model.RedirectTokenandPin
- Model.SecurityType
- Model.SessionEvent
- Model.SnapTradeAPIDisclaimerAcceptStatus
- Model.SnapTradeHoldingsAccount
- Model.SnapTradeHoldingsTotalValue
- Model.SnapTradeLoginUserRequestBody
- Model.SnapTradeRegisterUserRequestBody
- Model.Status
- Model.StrategyImpact
- Model.StrategyImpactLegsInner
- Model.StrategyOrderPlace
- Model.StrategyOrderPlaceOrdersInner
- Model.StrategyOrderPlaceOrdersInnerLegsInner
- Model.StrategyOrderRecord
- Model.StrategyQuotes
- Model.StrategyQuotesGreek
- Model.SubPeriodReturnRate
- Model.Symbol
- Model.SymbolQuery
- Model.SymbolsQuotes
- Model.TargetAsset
- Model.TimeInForce
- Model.Trade
- Model.TradeExecutionStatus
- Model.TradeImpact
- Model.TradingCancelUserAccountOrderRequest
- Model.TradingPlaceOCOOrderRequest
- Model.TransactionsStatus
- Model.USExchange
- Model.UnderlyingSymbol
- Model.UniversalActivity
- Model.UniversalSymbol
- Model.UniversalSymbolTicker
- Model.UserErrorLog
- Model.UserIDandSecret
- Model.UserSettings
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- JsonSubTypes (>= 1.9.0)
- Newtonsoft.Json (>= 13.0.1)
- Polly (>= 7.2.3)
- RestSharp (>= 108.0.2)
- System.ComponentModel.Annotations (>= 5.0.0)
-
net5.0
- JsonSubTypes (>= 1.9.0)
- Newtonsoft.Json (>= 13.0.1)
- Polly (>= 7.2.3)
- RestSharp (>= 108.0.2)
- System.ComponentModel.Annotations (>= 5.0.0)
-
net7.0
- JsonSubTypes (>= 1.9.0)
- Newtonsoft.Json (>= 13.0.1)
- Polly (>= 7.2.3)
- RestSharp (>= 108.0.2)
- System.ComponentModel.Annotations (>= 5.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
5.0.15 | 141 | 4/18/2024 |
5.0.14 | 74 | 4/12/2024 |
5.0.13 | 304 | 4/5/2024 |
5.0.12 | 514 | 3/14/2024 |
5.0.11 | 77 | 3/12/2024 |
5.0.10 | 94 | 3/5/2024 |
5.0.9 | 374 | 2/23/2024 |
5.0.8 | 99 | 2/21/2024 |
5.0.7 | 78 | 2/16/2024 |
5.0.6 | 99 | 2/14/2024 |
5.0.5 | 83 | 2/9/2024 |
5.0.4 | 75 | 2/2/2024 |
5.0.3 | 341 | 2/1/2024 |
5.0.2 | 85 | 1/29/2024 |
5.0.1 | 80 | 1/26/2024 |
5.0.0 | 195 | 1/24/2024 |
4.0.12 | 804 | 1/17/2024 |
4.0.11 | 88 | 1/16/2024 |
4.0.10 | 192 | 1/11/2024 |
4.0.9 | 122 | 1/3/2024 |
4.0.8 | 415 | 12/12/2023 |
4.0.7 | 164 | 12/4/2023 |
4.0.6 | 119 | 11/30/2023 |
4.0.5 | 111 | 11/15/2023 |
4.0.4 | 116 | 11/8/2023 |
4.0.3 | 123 | 11/1/2023 |
4.0.2 | 151 | 10/18/2023 |
4.0.1 | 149 | 10/13/2023 |
4.0.0 | 151 | 10/7/2023 |
3.33.2 | 206 | 9/26/2023 |
3.33.1 | 160 | 9/19/2023 |
3.33.0 | 235 | 9/2/2023 |
3.32.1 | 153 | 8/31/2023 |
3.32.0 | 155 | 8/16/2023 |
3.31.0 | 169 | 8/14/2023 |
3.30.0 | 204 | 8/11/2023 |
3.29.0 | 169 | 8/9/2023 |
3.28.0 | 178 | 8/9/2023 |
3.27.0 | 177 | 8/4/2023 |
3.26.0 | 160 | 8/2/2023 |
3.25.0 | 194 | 7/31/2023 |
3.24.0 | 168 | 7/27/2023 |
3.23.0 | 180 | 7/27/2023 |
3.22.0 | 177 | 7/18/2023 |
3.21.0 | 172 | 6/22/2023 |
3.20.0 | 172 | 6/13/2023 |
3.19.0 | 173 | 6/7/2023 |
3.18.0 | 199 | 6/5/2023 |
3.17.0 | 249 | 6/1/2023 |
3.15.0 | 165 | 5/29/2023 |
3.14.0 | 170 | 5/26/2023 |
3.13.0 | 3,535 | 5/18/2023 |
3.12.0 | 156 | 5/16/2023 |
3.11.0 | 163 | 5/15/2023 |
3.10.0 | 190 | 5/9/2023 |
3.9.0 | 475 | 4/28/2023 |
3.8.0 | 204 | 4/28/2023 |
3.7.0 | 372 | 4/23/2023 |
3.6.0 | 171 | 4/21/2023 |
3.5.0 | 198 | 4/20/2023 |
3.4.0 | 188 | 4/18/2023 |
3.3.0 | 197 | 4/17/2023 |
3.2.0 | 216 | 4/15/2023 |
3.1.0 | 202 | 4/15/2023 |
3.0.0 | 213 | 4/12/2023 |
2.0.0 | 218 | 4/11/2023 |
1.3.0 | 234 | 4/6/2023 |
1.2.0 | 218 | 4/6/2023 |
1.1.0 | 243 | 4/6/2023 |
1.0.0 | 237 | 4/6/2023 |
Minor update