Skip to content

Evaluation reasons and error codes

When you evaluate a flag using the binding's *Details methods or the OpenFeature SDK, the response includes a reason field that explains why a particular value was returned. If an error occurs, the response includes an errorCode field.

Evaluation reasons

ReasonDescription
TARGETING_MATCHA targeting rule's conditions matched the evaluation context, and the rule's variant was returned.
SPLITA targeting rule with a percentage rollout matched. The user fell within the rollout percentage and received the rule's variant.
DEFAULTNo targeting rule matched the evaluation context. The flag's default variant was returned.
DISABLEDThe flag is disabled. The default variant was returned regardless of targeting rules.
CACHEDThe SDK returned a cached evaluation result.
ERROREvaluation failed and the default value was returned.

Error codes

When an evaluation error occurs, the method returns the default value you provided. The *Details methods include additional metadata about the error.

Error codeDescription
TYPE_MISMATCHThe flag's variant type does not match the requested type. For example, calling getBooleanValue on a flag whose variant is a string. The default value is returned.
FLAG_NOT_FOUNDThe specified flag key does not exist in the app. The default value is returned.
INVALID_CONTEXTThe evaluation context contains unsupported values, such as objects or arrays in HTTP evaluation. The default value is returned.
PARSE_ERRORThe SDK received an invalid evaluation response. The default value is returned.
GENERALAn unexpected error occurred during evaluation, such as a timeout or network failure. The default value is returned.

Example

The following example inspects evaluation details returned by getBooleanDetails:

JavaScript
const details = await env.FLAGS.getBooleanDetails("my-feature", false, {
userId: "user-42",
});
switch (details.reason) {
case "TARGETING_MATCH":
console.log(`Matched targeting rule, variant: ${details.variant}`);
break;
case "SPLIT":
console.log(`Included in rollout, variant: ${details.variant}`);
break;
case "DEFAULT":
console.log("No rule matched, using default variant");
break;
case "DISABLED":
console.log("Flag is disabled");
break;
}
if (details.errorCode) {
console.error(`Evaluation error: ${details.errorCode}`);
}