Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.sportsxapp.com/llms.txt

Use this file to discover all available pages before exploring further.

STX.Sdk integrates with the standard .NET dependency-injection container through a single extension method. One call registers every HTTP service, WebSocket channel, background worker, and storage singleton the SDK provides. You then resolve services by their type anywhere in your app.

Register services

Call ConfigureSTXServices during host setup, passing the GraphQL HTTP endpoint and the Phoenix WebSocket endpoint for your target environment:
using STX.Sdk;
using Microsoft.Extensions.DependencyInjection;

services.ConfigureSTXServices(
    graphQLUri:  "https://in-api-staging.stxapp.io/graphiql",
    channelsUri: "wss://in-api-staging.stxapp.io/socket/websocket?token={0}&vsn=2.0.0");
{0} in channelsUri is a format placeholder. The SDK substitutes the current JWT automatically before opening the socket — you never need to interpolate it yourself.
ConfigureSTXServices adds:
  • GraphQL HTTP client and all typed services: STXLoginService, STXMarketService, STXOrderService, STXTradeService, STXSettlementService, STXProfileService, and more.
  • Phoenix channel wrappers: STXPortfolioChannel, STXActiveOrdersChannel, STXActiveTradesChannel, STXPositionsChannel, STXMarketChannel, and others.
  • STXUserStorage as a singleton to hold the JWT between calls.
  • Two hosted background services: STXSessionBackgroundService (JWT refresh) and STXGeoLocationBackgroundService (geolocation token). These start automatically under IHost.

Endpoints per environment

EnvironmentgraphQLUrichannelsUri
Staginghttps://in-api-staging.stxapp.io/graphiqlwss://in-api-staging.stxapp.io/socket/websocket?token={0}&vsn=2.0.0
Productionhttps://in-api.stxapp.io/graphiqlwss://in-api.stxapp.io/socket/websocket?token={0}&vsn=2.0.0
Pull these from configuration so deploys can switch environments without recompiling:
services.ConfigureSTXServices(
    graphQLUri:  builder.Configuration["STX:GraphQLUri"]!,
    channelsUri: builder.Configuration["STX:ChannelsUri"]!);
appsettings.json:
{
  "STX": {
    "GraphQLUri":  "https://in-api-staging.stxapp.io/graphiql",
    "ChannelsUri": "wss://in-api-staging.stxapp.io/socket/websocket?token={0}&vsn=2.0.0"
  }
}
Override per environment with appsettings.Production.json, or use environment variables (double-underscore as separator):
STX__GraphQLUri=https://in-api.stxapp.io/graphiql
STX__ChannelsUri=wss://in-api.stxapp.io/socket/websocket?token={0}&vsn=2.0.0

Dynamic endpoint resolution

If your endpoints depend on something inside the DI container — a tenant selector, feature flag service, or remote config provider — use the overload that takes Func<IServiceProvider, string> callbacks:
services.ConfigureSTXServices(
    getGraphQLUri:  sp => sp.GetRequiredService<IMyEnvResolver>().GraphQLUri,
    getChannelsUri: sp => sp.GetRequiredService<IMyEnvResolver>().ChannelsUri);

Resolving services

Services are registered as Transient, so it’s safe to resolve a new instance per operation or inject them into scoped/transient components. Channel classes are registered as Singleton — the active socket and subscribed topics are shared across the app. Inject them through the constructor as usual:
public class OrderPlacer
{
    private readonly STXOrderService _orders;
    private readonly STXMarketService _markets;

    public OrderPlacer(STXOrderService orders, STXMarketService markets)
    {
        _orders  = orders;
        _markets = markets;
    }

    public async Task PlaceAsync() { /* ... */ }
}

Logging

The SDK uses Microsoft.Extensions.Logging. Configure the provider you prefer:
services.AddLogging(builder =>
    builder
        .SetMinimumLevel(LogLevel.Information)
        .AddConsole());
Log levels the SDK emits:
LevelWhat gets logged
DebugFull GraphQL request and response bodies, including variables
InformationConnection lifecycle events (connect, disconnect, reconnect)
WarningTransient failures before retry
ErrorFatal errors that surface as exceptions

Geolocation

ConfigureSTXServices registers STXGeoLocationBackgroundService internally. For server-side trading bots the default behavior is what you want — the geolocation token is fetched lazily and cached in the background. If you embed the SDK in a desktop or mobile client app, integrate with GeoComply’s native SDK per their documentation before calling LoginAsync.