JustArchiNET/ArchiSteamFarm · error · TimeoutException
Failed due to error: {0}
Error message
Failed due to error: {0} What it means
Inside GetMyInventoryAsync's GameCoordinator retry loop, EResult.NoMatch is treated as a terminal, non-retryable failure and throws a TimeoutException wrapping the EResult. 'No match' from Steam means the request did not match an expected inventory/context (e.g. wrong app/context ID combination for the account).
Source
Thrown at ArchiSteamFarm/Steam/Integration/ArchiHandler.cs:259
continue;
}
// Interpret the result and see what we should do about it
switch (response.Result) {
case EResult.OK:
// Success, we can continue
break;
case EResult.Busy:
case EResult.DuplicateRequest:
case EResult.Fail:
case EResult.RemoteCallFailed:
case EResult.ServiceUnavailable:
case EResult.Timeout:
// Expected failures that we should be able to retry
continue;
case EResult.NoMatch:
// Expected failures that we're not going to retry
throw new TimeoutException(Strings.FormatWarningFailedWithError(response.Result));
default:
// Unknown failures, report them and do not retry since we're unsure if we should
ArchiLogger.LogGenericError(Strings.FormatWarningUnknownValuePleaseReport(nameof(response.Result), response.Result));
throw new TimeoutException(Strings.FormatWarningFailedWithError(response.Result));
}
}
if (response == null) {
throw new TimeoutException(Strings.FormatErrorObjectIsNull(nameof(response)));
}
if (response.Result != EResult.OK) {
throw new TimeoutException(Strings.FormatWarningFailedWithError(response.Result));
}
if ((response.Body.total_inventory_count == 0) || (response.Body.assets.Count == 0)) {
// Empty inventoryView on GitHub (pinned to fe57c4129f)
Solutions
- Verify appID and contextID passed to GetMyInventoryAsync are valid for the account (Steam community = 730/2 by default).
- Confirm the target account's inventory is public / owned by the bot.
- Treat NoMatch as a soft failure in the caller rather than retrying identically.
- Retry once after a short delay in case of a transient Steam-side mismatch.
Example fix
// before appID = 730, contextID = 6 // wrong context // after appID = Asset.SteamAppID /*730*/, contextID = Asset.SteamCommunityContextID /*2*/
Defensive patterns
Strategy: try-catch
Validate before calling
// Validate the requested app/context pair is a known community inventory.
if (appID != Asset.SteamAppID || contextID != Asset.SteamCommunityContextID)
logger.LogWarning("Non-standard inventory context may yield NoMatch"); Try / catch
try { await foreach (var a in handler.GetMyInventoryAsync(appID, contextID)) { /* ... */ } }
catch (TimeoutException ex) when (ex.Message.Contains("NoMatch")) {
// terminal: stop retrying this app/context combination
} Prevention
- Use the documented community app/context IDs unless you have a reason not to.
- Treat NoMatch as terminal, not transient, in retry logic.
- Confirm the account owns the target app and has a public inventory.
When it happens
Trigger: Steam's CEcon service returns EResult.NoMatch for the requested appID/contextID/account — typically an invalid app+context pair, a private/hidden inventory, or a context that does not exist for the account.
Common situations: Querying a non-Steam-community context ID; querying an app inventory the account does not own; inventory privacy settings or a restricted account; Steam temporarily misrouting the request.
Related errors
- response is null!
- Failed due to error: Client.IsConnected
- classid is null!
- last_assetid is null!
- response is null!
AI-assisted analysis of JustArchiNET/ArchiSteamFarm@fe57c4129f (2026-08-13).
Data as JSON: /api/errors/28581e96ab2109dd.
Report an issue: GitHub.