diff --git a/CryptoExchange.Net/CryptoExchange.Net.csproj b/CryptoExchange.Net/CryptoExchange.Net.csproj
index c3aef77..2709772 100644
--- a/CryptoExchange.Net/CryptoExchange.Net.csproj
+++ b/CryptoExchange.Net/CryptoExchange.Net.csproj
@@ -14,6 +14,10 @@
en
true
+
+
+ CryptoExchange.Net.xml
+
diff --git a/CryptoExchange.Net/CryptoExchange.Net.xml b/CryptoExchange.Net/CryptoExchange.Net.xml
new file mode 100644
index 0000000..c9b64ab
--- /dev/null
+++ b/CryptoExchange.Net/CryptoExchange.Net.xml
@@ -0,0 +1,924 @@
+
+
+
+ CryptoExchange.Net
+
+
+
+
+ The api key to authenticate requests
+
+
+
+
+ The api secret to authenticate requests
+
+
+
+
+ The private key to authenticate requests
+
+
+
+
+ Create Api credentials providing a private key for authentication
+
+ The private key used for signing
+
+
+
+ Create Api credentials providing a api key and secret for authentication
+
+ The api key used for identification
+ The api secret used for signing
+
+
+
+ Create Api credentials providing a api key and secret for authentication
+
+ The api key used for identification
+ The api secret used for signing
+
+
+
+ Create Api credentials providing a stream containing json data. The json data should include two values: apiKey and apiSecret
+
+ The stream containing the json data
+ A key to identify the credentials for the API. For example, when set to `binanceKey` the json data should contain a value for the property `binanceKey`. Defaults to 'apiKey'.
+ A key to identify the credentials for the API. For example, when set to `binanceSecret` the json data should contain a value for the property `binanceSecret`. Defaults to 'apiSecret'.
+
+
+
+ The private key
+
+
+
+
+ The private key's pass phrase
+
+
+
+
+ Indicates if the private key is encrypted or not
+
+
+
+
+ Create a private key providing an encrypted key information
+
+ The private key used for signing
+ The private key's passphrase
+
+
+
+ Create a private key providing an encrypted key information
+
+ The private key used for signing
+ The private key's passphrase
+
+
+
+ Create a private key providing an unencrypted key information
+
+ The private key used for signing
+
+
+
+ Create a private key providing an encrypted key information
+
+ The private key used for signing
+
+
+
+ Configure the client using the provided options
+
+ Options
+
+
+
+ Set the authentication provider
+
+
+
+
+
+ Tries to parse the json data and returns a token
+
+ The data to parse
+
+
+
+
+ Deserialize a string into an object
+
+ The type to deserialize into
+ The data to deserialize
+ Whether or not the parsing should be checked for missing properties (will output data to the logging if log verbosity is Debug)
+ A specific serializer to use
+
+
+
+
+ Deserialize a JToken into an object
+
+ The type to deserialize into
+ The data to deserialize
+ Whether or not the parsing should be checked for missing properties (will output data to the logging if log verbosity is Debug)
+ A specific serializer to use
+
+
+
+
+ Generate a unique id
+
+
+
+
+
+ Fill parameters in a path. Parameters are specified by '{}' and should be specified in occuring sequence
+
+ The total path string
+ The values to fill
+
+
+
+
+ Create a query string of the specified parameters
+
+ The parameters to use
+ Whether or not the values should be url encoded
+
+
+
+
+ Get the string the secure string is representing
+
+ The source secure string
+
+
+
+
+ Base class for rest API implementations
+
+
+
+
+ The factory for creating requests. Used for unit testing
+
+
+
+
+ What should happen when hitting a rate limit
+
+
+
+
+ List of active rate limiters
+
+
+
+
+ The total amount of requests made
+
+
+
+
+ The base address of the API
+
+
+
+
+ Adds a rate limiter to the client. There are 2 choices, the and the .
+
+ The limiter to add
+
+
+
+ Removes all rate limiters from this client
+
+
+
+
+ Ping to see if the server is reachable
+
+ The roundtrip time of the ping request
+
+
+
+ Ping to see if the server is reachable
+
+ The roundtrip time of the ping request
+
+
+
+ Base class for socket API implementations
+
+
+
+
+ The factory for creating sockets. Used for unit testing
+
+
+
+
+ The time in between reconnect attempts
+
+
+
+
+ Whether the client should try to auto reconnect when losing connection
+
+
+
+
+ The base address of the API
+
+
+
+
+ Unsubscribe from a stream
+
+ The subscription to unsubscribe
+
+
+
+
+ Unsubscribe all subscriptions
+
+
+
+
+
+ The host address of the proxy
+
+
+
+
+ The port of the proxy
+
+
+
+
+ The login of the proxy
+
+
+
+
+ The password of the proxy
+
+
+
+
+ Create new settings for a proxy
+
+ The proxy hostname/ip
+ The proxy port
+
+
+
+
+ Create new settings for a proxy
+
+ The proxy hostname/ip
+ The proxy port
+ The proxy login
+ The proxy password
+
+
+
+ The data returned by the call
+
+
+
+
+ An error if the call didn't succeed
+
+
+
+
+ Whether the call was successful
+
+
+
+
+ The status code of the response. Note that a OK status does not always indicate success, check the Success parameter for this.
+
+
+
+
+ The error code
+
+
+
+
+ The message for the error that occured
+
+
+
+
+ Base options
+
+
+
+
+ The log verbosity
+
+
+
+
+ The log writers
+
+
+
+
+ Base for order book options
+
+
+
+
+ The name of the order book implementation
+
+
+
+
+ Whether each update should have a consecutive id number. Used to identify and reconnect when numbers are skipped.
+
+
+
+
+
+ The name of the order book implementation
+ Whether each update should have a consecutive id number. Used to identify and reconnect when numbers are skipped.
+
+
+
+ Base client options
+
+
+
+
+ The api credentials
+
+
+
+
+ The base address of the client
+
+
+
+
+ Proxy to use
+
+
+
+
+ Base for rest client options
+
+
+
+
+ List of rate limiters to use
+
+
+
+
+ What to do when a call would exceed the rate limit
+
+
+
+
+ The time the server has to respond to a request before timing out
+
+
+
+
+ Base for socket client options
+
+
+
+
+ Whether or not the socket should automatically reconnect when losing connection
+
+
+
+
+ Time to wait between reconnect attempts
+
+
+
+
+ The time to wait for a socket response
+
+
+
+
+ The time after which the connection is assumed to be dropped
+
+
+
+
+ The amount of subscriptions that should be made on a single socket connection. Not all exchanges support multiple subscriptions on a single socket.
+ Setting this to a higher number increases subscription speed, but having more subscriptions on a single connection will also increase the amount of traffic on that single connection.
+
+
+
+
+ The quantity of the entry
+
+
+
+
+ The price of the entry
+
+
+
+
+ Base for order book implementations
+
+
+
+
+ The status of the order book. Order book is up to date when the status is `Synced`
+
+
+
+
+ Last update identifier
+
+
+
+
+ The symbol of the order book
+
+
+
+
+ Event when the state changes
+
+
+
+
+ The number of asks in the book
+
+
+
+
+ The number of bids in the book
+
+
+
+
+ The list of asks
+
+
+
+
+ The list of bids
+
+
+
+
+ The best bid currently in the order book
+
+
+
+
+ The best ask currently in the order book
+
+
+
+
+ Start connecting and synchronizing the order book
+
+
+
+
+
+ Start connecting and synchronizing the order book
+
+
+
+
+
+ Stop syncing the order book
+
+
+
+
+
+ Stop syncing the order book
+
+
+
+
+
+ Limits the amount of requests per time period to a certain limit, counts the request per API key.
+
+
+
+
+ Create a new RateLimiterAPIKey. This rate limiter limits the amount of requests per time period to a certain limit, counts the request per API key.
+
+ The amount to limit to
+ The time period over which the limit counts
+
+
+
+ Limits the amount of requests per time period to a certain limit, counts the request per endpoint.
+
+
+
+
+ Create a new RateLimiterPerEndpoint. This rate limiter limits the amount of requests per time period to a certain limit, counts the request per endpoint.
+
+ The amount to limit to
+ The time period over which the limit counts
+
+
+
+ Limits the amount of requests per time period to a certain limit, counts the total amount of requests.
+
+
+
+
+ Create a new RateLimiterTotal. This rate limiter limits the amount of requests per time period to a certain limit, counts the total amount of requests.
+
+ The amount to limit to
+ The time period over which the limit counts
+
+
+
+ The factory for creating requests. Used for unit testing
+
+
+
+
+ Configure the client using the provided options
+
+ Options
+
+
+
+ Adds a rate limiter to the client. There are 2 choices, the and the .
+
+ The limiter to add
+
+
+
+ Removes all rate limiters from this client
+
+
+
+
+ Ping to see if the server is reachable
+
+ The roundtrip time of the ping request
+
+
+
+ Ping to see if the server is reachable
+
+ The roundtrip time of the ping request
+
+
+
+ Execute a request
+
+ The expected result type
+ The uri to send the request to
+ The method of the request
+ The parameters of the request
+ Whether or not the request should be authenticated
+ Whether or not the resulting object should be checked for missing properties in the mapping (only outputs if log verbosity is Debug)
+
+
+
+
+ Can be overridden to indicate if a response is an error response
+
+ The received data
+ True if error response
+
+
+
+ Creates a request object
+
+ The uri to send the request to
+ The method of the request
+ The parameters of the request
+ Whether or not the request should be authenticated
+
+
+
+
+ Writes the string data of the parameters to the request body stream
+
+
+
+
+
+
+ Writes the parameters of the request to the request object, either in the query string or the request body
+
+
+
+
+
+
+ Executes the request and returns the string result
+
+ The request object to execute
+
+
+
+
+ Parse an error response from the server. Only used when server returns a status other than Success(200)
+
+ The string the request returned
+
+
+
+
+ The factory for creating sockets. Used for unit testing
+
+
+
+
+ List of socket connections currently connecting/connected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The max amount of concurrent socket connections
+
+
+
+
+
+
+
+ Configure the client using the provided options
+
+ Options
+
+
+
+ Set a function to interpret the data, used when the data is received as bytes instead of a string
+
+ Handler for byte data
+ Handler for string data
+
+
+
+ Subscribe
+
+ The expected return data
+ The request to send
+ The identifier to use
+ If the subscription should be authenticated
+ The handler of update data
+
+
+
+
+ Subscribe using a specif URL
+
+ The type of the expected data
+ The URL to connect to
+ The request to send
+ The identifier to use
+ If the subscription should be authenticated
+ The handler of update data
+
+
+
+
+ Sends the subscribe request and waits for a response to that request
+
+ The connection to send the request on
+ The request to send
+ The subscription the request is for
+
+
+
+
+ Query for data
+
+ The expected result type
+ The request to send
+ Whether the socket should be authenticated
+
+
+
+
+ Sends the query request and waits for the result
+
+ The expected result type
+ The connection to send and wait on
+ The request to send
+
+
+
+
+ Checks if a socket needs to be connected and does so if needed
+
+ The connection to check
+ Whether the socket should authenticated
+
+
+
+
+ Needs to check if a received message was an answer to a query request (preferable by id) and set the callResult out to whatever the response is
+
+ The type of response
+ The socket connection
+ The request that a response is awaited for
+ The message
+ The interpretation (null if message wasn't a response to the request)
+ True if the message was a response to the query
+
+
+
+ Needs to check if a received message was an answer to a subscription request (preferable by id) and set the callResult out to whatever the response is
+
+ The socket connection
+
+ The request that a response is awaited for
+ The message
+ The interpretation (null if message wasn't a response to the request)
+ True if the message was a response to the subscription request
+
+
+
+ Needs to check if a received message matches a handler. Typically if an update message matches the request
+
+ The received data
+ The subscription request
+
+
+
+
+ Needs to check if a received message matches a handler. Typically if an received message matches a ping request or a other information pushed from the the server
+
+ The received data
+ The string identifier of the handler
+
+
+
+
+ Needs to authenticate the socket so authenticated queries/subscriptions can be made on this socket connection
+
+
+
+
+
+
+ Needs to unsubscribe a subscription, typically by sending an unsubscribe request. If multiple subscriptions per socket is not allowed this can just return since the socket will be closed anyway
+
+ The connection on which to unsubscribe
+ The subscription to unsubscribe
+
+
+
+
+ Optional handler to interpolate data before sending it to the handlers
+
+
+
+
+
+
+ Add a handler for a subscription
+
+ The type of data the subscription expects
+ The request of the subscription
+ The identifier of the subscription (can be null if request param is used)
+ Whether or not this is a user subscription (counts towards the max amount of handlers on a socket)
+ The socket connection the handler is on
+ The handler of the data received
+
+
+
+
+ Adds a generic message handler. Used for example to reply to ping requests
+
+ The name of the request handler. Needs to be unique
+ The action to execute when receiving a message for this handler (checked by )
+
+
+
+ Gets a connection for a new subscription or query. Can be an existing if there are open position or a new one.
+
+ The address the socket is for
+ Whether the socket should be authenticated
+
+
+
+
+ Connect a socket
+
+ The socket to connect
+
+
+
+
+ Create a socket for an address
+
+ The address the socket should connect to
+
+
+
+
+ Periodically sends an object to a socket
+
+ How often
+ Method returning the object to send
+
+
+
+ Unsubscribe from a stream
+
+ The subscription to unsubscribe
+
+
+
+
+ Unsubscribe all subscriptions
+
+
+
+
+
+ Dispose the client
+
+
+
+
+ Send data to the websocket
+
+ The type of the object to send
+ The object to send
+ How null values should be serialized
+
+
+
+ Send string data to the websocket
+
+ The data to send
+
+
+
+ Handler for a socket closing. Reconnects the socket if needed, or removes it from the active socket list if not
+
+
+
+
+ Message handlers for this subscription. Should return true if the message is handled and should not be distributed to the other handlers
+
+
+
+
+ Event when the connection is lost. The socket will automatically reconnect when possible.
+
+
+
+
+ Event when the connection is restored. Timespan parameter indicates the time the socket has been offline for before reconnecting
+
+
+
+
+ Event when an exception happened
+
+
+
+
+ The id of the socket
+
+
+
+
+ Close the subscription
+
+
+
+
+
+ Close the socket to cause a reconnect
+
+
+
+
+