Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ShohjahonSohibov/repo-for-agent/llms.txt

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

UpdaterAgent is built around a hub-and-spoke integration model: every external service is encapsulated behind a typed broker interface in the Infrastructure layer, keeping business logic independent of third-party API details. This architecture supports 18 brokers today, covering the full logistics stack from load import to real-time vehicle tracking and AI-powered document analysis.

Integration summary

BrokerCategoryPurposeAuth methodFrequency
QuickManageTMSLoad, driver, truck data + webhooksBearer + HMACPolling 3hr + webhooks
ZippyELDVehicle position trackingAPI credsPolling 25min
SamsaraELDAlternative ELD platformAPI tokenConfigurable
UTrackinELDVehicle trackingOAuth 2.0Configurable
LevelEldELDLevel ELD trackingAPI credsConfigurable
TelegramCommDriver notifications, alertsBot tokenScheduled + on-demand
NylasEmailEmail processing, ratecon extractionOAuth 2.0Webhooks
Google MapRoutingRoute optimization, geocoding, ETAAPI keyOn-demand (fallback)
OSRMRoutingOpen-source routing (primary)NoneOn-demand
ValhallaRoutingAlternative routing engineNoneOn-demand
HereRoutingRoutingHERE Maps routingAPI keyOn-demand
NominatimGeocodingAddress geocoding fallbackNoneOn-demand
GeoNamesGeocodingTimezone lookupNoneOn-demand
AskAIAIDocument analysis, ticket suggestionsAPI keyOn-demand
EiaDataEnergy and fuel dataAPI keyScheduled
OnTimeLogsLoggingOnTime driver logsAPI credsPolling
RTAAnalyticsReal-time analyticsAPI keyOn-demand

Broker pattern

Every integration in UpdaterAgent follows a four-part structure defined in src/UpdaterAgent.Infrastructure/Brokers/. Interface — a typed contract that services depend on, never the concrete HTTP client:
public interface IQuickManageBroker
{
    Task<Result<AccessTokenResponse>> GenerateTokenAsync(AccessTokenRequest request);
    Task<Result<List<DriverResponse>>> GetDriversAsync(string token, long companyId);
    Task<Result<TripResponse>> GetTripAsync(string token, string tripId);
    // ...
}
Implementation — a concrete class using HttpClient, registered as a scoped service:
builder.Services.AddScoped<IQuickManageBroker, QuickManageBroker>();
builder.Services.AddScoped<IZippyBroker, ZippyBroker>();
builder.Services.AddScoped<ITelegramBotBroker, TelegramBotBroker>();
Configuration — credentials and URLs stored in appsettings.json or environment variables:
{
  "QuickManage": {
    "BaseUrl": "https://api.quickmanage.com",
    "ApiKey": "xxx",
    "HmacSecret": "xxx"
  },
  "Zippy": {
    "BaseUrl": "https://read.zippyeld.com/",
    "UnitsUri": "api/v2/units-by-usdot"
  }
}
Errors — a static class of typed Result errors so callers receive structured failures instead of exceptions:
public static class QuickManageErrors
{
    public static Error AuthenticationFailed =>
        new("QM.AuthenticationFailed", "Failed to authenticate with QuickManage");

    public static Error ApiCallFailed(string endpoint) =>
        new("QM.ApiCallFailed", $"API call to {endpoint} failed");
}
Each broker directory under Brokers/ contains exactly these four concerns: IBroker.cs, Broker.cs, BrokerErrors.cs, and a Contracts/ folder for config and response DTOs.

Per-company configuration

Each company can activate a different set of integrations. The IntegrationProvider entity stores per-company credentials and the active provider selection:
public class IntegrationProvider
{
    public long CompanyId { get; set; }
    public EIntegrationProviderKey Provider { get; set; }  // QuickManage, Zippy, Samsara, ...
    public string? ApiKey { get; set; }
    public string? ApiSecret { get; set; }
    public bool IsActive { get; set; }
    public Dictionary<string, string> Settings { get; set; }
}
For example, Company A may use QuickManage + Zippy, while Company B uses QuickManage + Samsara. Companies without a TMS integration fall back to manual data entry.

Detailed integration guides

QuickManage

TMS sync, webhook setup, driver ID mapping, and manual import endpoints.

ELD providers

Zippy, Samsara, UTrackin, and LevelELD — position polling and ELD settings API.

Routing and geocoding

Hybrid OSRM + Google Maps routing strategy and geocoding fallback chain.

Build docs developers (and LLMs) love