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 inventory

View on GitHub (pinned to fe57c4129f)

Solutions

  1. Verify appID and contextID passed to GetMyInventoryAsync are valid for the account (Steam community = 730/2 by default).
  2. Confirm the target account's inventory is public / owned by the bot.
  3. Treat NoMatch as a soft failure in the caller rather than retrying identically.
  4. 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

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


AI-assisted analysis of JustArchiNET/ArchiSteamFarm@fe57c4129f (2026-08-13). Data as JSON: /api/errors/28581e96ab2109dd. Report an issue: GitHub.