You're viewing **Apigee Edge** documentation.  
[Go to the
**Apigee X** documentation](http://cloud.google.com/apigee/docs/api-platform/fundamentals/what-you-need-know-about-policy-errors). info

## AccessControl policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `accesscontrol.IPDeniedAccess` | 403 | The client IP address, or an IP address passed in the API request, matches an IP address specified in the `<SourceAddress>` element within the `<MatchRule>` element of the Access Control Policy, and the `action` attribute of the `<MatchRule>` element is set to `DENY`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/access-control-runtime-errors#ipdeniedaccess) |

### Fault variables

These variables are set when a runtime error occurs. For more information, see [Variables specific to policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors#variablesspecifictopolicyerrors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "IPDeniedAccess"` |
| `acl.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `acl.AC-AllowAccess.failed = true` |

### Example fault response

> [!NOTE]
> **Note:** For fault handling, the best practice is to trap the `errorcode` part of the fault response. Do not rely on the text in the `faultstring` because it could change.

```
{
   "fault":{
     "faultstring":"Access Denied for client ip : 52.211.243.3"
      "detail":{
         "errorcode":"accesscontrol.IPDeniedAccess"
      }
   }
}
```

### Example fault rule

```
<FaultRule name="IPDeniedAccess">
    <Step>
        <Name>AM-IPDeniedAccess</Name>
        <Condition>(fault.name Matches "IPDeniedAccess") </Condition>
    </Step>
    <Condition>(acl.failed = true) </Condition>
</FaultRule>
```

<br />

## AccessEntity policy


For related information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

None.

### Deployment errors

| Error name | Fault string | HTTP status | Occurs when |
|---|---|---|---|
| `InvalidEntityType` | `Invalid type [entity_type] in ACCESSENTITYStepDefinition [policy_name]` | N/A | The entity type used must be one of the [supported types](https://docs.apigee.com/api-platform/reference/policies/access-entity-policy#Entities). |

<br />

## AssignMessage policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.assignmessage.SetVariableFailed` | 500 | The policy was not able to set a variable. See the fault string for the name of the unresolved variable. |   |
| `steps.assignmessage.VariableOfNonMsgType` | 500 | This error occurs if the `source` attribute in the `<Copy>` element is set to a variable which is not of type [message](https://docs.apigee.com/api-platform/reference/variables-reference#messagevariables). Message type variables represent entire HTTP requests and responses. The built-in Edge flow variables `request`, `response`, and `message` are of type message. To learn more about message variables, see the [Variables reference](https://docs.apigee.com/api-platform/reference/variables-reference#messagevariables). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/assign-message-runtime-errors#variableofnonmsgtype) |
| `steps.assignmessage.UnresolvedVariable` | 500 | This error occurs if a variable specified in the Assign Message policy is either: - out of scope (not available in the specific flow where the policy is being executed) or - can't be resolved (is not defined) | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/assign-message-runtime-errors#unresolvedvariable) |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click next to the error's cause description to visit the troubleshooting page.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidIndex` | If the index specified in the `<Copy>` and/or `<Remove>` elements of the Assign Message policy is 0 or a negative number, then deployment of the API Proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/assign-message-deployment-errors#invalidindex) |
| `InvalidVariableName` | If the child element `<Name>` is empty or not specified in the `<AssignVariable>` element, then the deployment of the API proxy fails because there is no valid variable name to which to assign a value. A valid variable name is required. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/assign-message-deployment-errors#invalidvariablename) |
| `InvalidPayload` | A payload specified in the policy is invalid. |   |

### Fault variables

These variables are set when this policy triggers an error at runtime. For more information,
see [What you
need to know about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "UnresolvedVariable"` |
| `assignmessage.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `assignmessage.AM-SetResponse.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.assignmessage.VariableOfNonMsgType"
      },
      "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message"
   }
}
```

### Example fault rule

```
    <FaultRule name="Assign Message Faults">    <Step>
        <Name>AM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition>
    </Step>
    <Step>
        <Name>AM-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(assignmessage.failed = true) </Condition>
</FaultRule>
```

<br />

## BasicAuthentication policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to
handle errors. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.basicauthentication.InvalidBasicAuthenticationSource` | 500 | On a decode when the incoming Base64 encoded string does not contain a valid value or the header is malformed (e.g., does not start with "Basic"). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/basic-authentication-runtime-errors#invalidbasicauthenticationsource) |
| `steps.basicauthentication.UnresolvedVariable` | 500 | The required source variables for the decode or encode are not present. This error can only occur if `IgnoreUnresolvedVariables` is false. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/basic-authentication-runtime-errors#unresolvedvariable) |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

| Error name | Occurs when | Fix |
|---|---|---|
| `UserNameRequired` | The `<User>` element must be present for the named operation. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/basic-authentication-deployment-errors#usernamerequired) |
| `PasswordRequired` | The `<Password>` element must be present for the named operation. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/basic-authentication-deployment-errors#passwordrequired) |
| `AssignToRequired` | The `<AssignTo>` element must be present for the named operation. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/basic-authentication-deployment-errors#assigntorequired) |
| `SourceRequired` | The `<Source>` element must be present for the named operation. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/basic-authentication-deployment-errors#sourcerequired) |

### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "UnresolvedVariable"` |
| `BasicAuthentication.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `BasicAuthentication.BA-Authenticate.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.basicauthentication.UnresolvedVariable"
      },
      "faultstring":"Unresolved variable : request.queryparam.password"
   }
}
```

### Example fault rule

```
<FaultRule name="Basic Authentication Faults">
    <Step>
        <Name>AM-UnresolvedVariable</Name>
        <Condition>(fault.name Matches "UnresolvedVariable") </Condition>
    </Step>
    <Step>
        <Name>AM-AuthFailedResponse</Name>
        <Condition>(fault.name = "InvalidBasicAuthenticationSource")</Condition>
    </Step>
    <Condition>(BasicAuthentication.BA-Authentication.failed = true) </Condition>
</FaultRule>
```

<br />

## ConcurrentRateLimit policy

> [!WARNING]
> **Deprecated:** The ConcurrentRateLimit policy has been deprecated. See [ConcurrentRateLimit policy](https://docs.apigee.com/api-platform/reference/policies/concurrent-rate-limit-policy) for more information.


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle errors. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Occurs when |
|---|---|---|
| `policies.concurrentratelimit.ConcurrentRatelimtViolation` | 503 | ConcurrentRatelimit connection exceeded. Connection limit : {0} **Note:** The Fault code shown on the left is correct, although it contains a misspelling ("limt"). Be sure to use the code exactly as shown here when creating fault rules to trap this error. |

### Deployment errors

| Error name | Occurs when |
|---|---|
| `InvalidCountValue` | ConcurrentRatelimit invalid count value specified. |
| `ConcurrentRatelimitStepAttachment\ NotAllowedAtProxyEndpoint` | Concurrent Ratelimit policy {0} attachment is not allowed at proxy request/response/fault paths. This policy must be placed on the Target Endpoint. |
| `ConcurrentRatelimitStepAttachment\ MissingAtTargetEndpoint` | Concurrent Ratelimit policy {0} attachment is missing at target request/response/fault paths. This policy must be placed in the Target Request Preflow, Target Response Postflow, and DefaultFaultRule. |
| `InvalidTTLForMessageTimeOut` | ConcurrentRatelimit invalid ttl value specified for message timeout. It must be a positive integer. |

### Fault variables

These variables are set when this policy triggers an error. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "ConcurrentRatelimtViolation"` **Note:** The Error code shown in the example is correct, although it contains a misspelling ("limt"). Please be sure to use the code exactly as shown here when creating fault rules to trap this error. |
| `concurrentratelimit.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `concurrentratelimit.CRL-RateLimitPolicy.failed = true` |

### Example error response

If the rate limit is exceeded, the policy returns only an HTTP status 503 to the client.

### Example fault rule

```
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRules>
    <FaultRule name="Quota Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "ConcurrentRatelimtViolation") </Condition>
        </Step>
        <Condition>concurrentratelimit.CRL-RateLimitPolicy.failed=true</Condition>
    </FaultRule>
</FaultRules>
```

<br />

## DecodeJWS policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Occurs when |
|---|---|---|
| `steps.jws.FailedToDecode` | 401 | The policy was unable to decode the JWS. The JWS is possibly corrupted. |
| **`steps.jws.FailedToResolveVariable`** | 401 | Occurs when the flow variable specified in the ` <Source>` element of the policy does not exist. |
| `steps.jws.InvalidClaim` | 401 | For a missing claim or claim mismatch, or a missing header or header mismatch. |
| `steps.jws.InvalidJsonFormat` | 401 | Invalid JSON found in the JWS header. |
| `steps.jws.InvalidJws` | 401 | This error occurs when the JWS signature verification fails. |
| `steps.jws.InvalidPayload` | 401 | The JWS payload is invalid. |
| `steps.jws.InvalidSignature` | 401 | `<DetachedContent>` is omitted and the JWS has a detached content payload. |
| `steps.jws.MissingPayload` | 401 | The JWS payload is missing. |
| `steps.jws.NoAlgorithmFoundInHeader` | 401 | Occurs when the JWS omits the algorithm header. |
| `steps.jws.UnknownException` | 401 | An unknown exception occurred. |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

| Error name | Occurs when |
|---|---|
| `InvalidAlgorithm` | The only valid values are: RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512, HS256, HS384, HS512. |
| `EmptyElementForKeyConfiguration` `FailedToResolveVariable` `InvalidConfigurationForActionAndAlgorithmFamily` `InvalidConfigurationForVerify` `InvalidEmptyElement` `InvalidFamiliesForAlgorithm` `InvalidKeyConfiguration` `InvalidNameForAdditionalClaim` `InvalidNameForAdditionalHeader` `InvalidPublicKeyId` `InvalidPublicKeyValue` `InvalidSecretInConfig` `InvalidTypeForAdditionalClaim` `InvalidTypeForAdditionalHeader` `InvalidValueForElement` `InvalidValueOfArrayAttribute` `InvalidVariableNameForSecret` `MissingConfigurationElement` `MissingElementForKeyConfiguration` `MissingNameForAdditionalClaim` `MissingNameForAdditionalHeader` | Other possible deployment errors. |

<br />


### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "TokenExpired"` |
| `JWS.failed` | All JWS policies set the same variable in the case of a failure. | `jws.JWS-Policy.failed = true` |

### Example error response

For error handling, the best practice is to trap the `errorcode` part of the error
response. Do not rely on the text in the `faultstring`, because it could change.

### Example fault rule

```
<FaultRules>
    <FaultRule name="JWS Policy Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "TokenExpired")</Condition>
        </Step>
        <Condition>JWS.failed=true</Condition>
    </FaultRule>
</FaultRules>
```

<br />

## DecodeJWT policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| **`steps.jwt.FailedToDecode`** | 401 | Occurs when the policy is unable to decode the JWT. The JWT may be malformed, invalid or otherwise not decodable. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/decode-JWT-runtime-errors#failedtodecode) |
| **`steps.jwt.FailedToResolveVariable`** | 401 | Occurs when the flow variable specified in the ` <Source>` element of the policy does not exist. |   |
| **`steps.jwt.InvalidToken`** | 401 | Occurs when the flow variable specified in the ` <Source>` element of the policy is out of scope or can't be resolved. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/decode-JWT-runtime-errors#invalidtoken) |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

| Error name | Cause | Fix |
|---|---|---|
| **`InvalidEmptyElement`** | Occurs when the flow variable containing the JWT to be decoded is not specified in the `<Source>` element of the policy. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/decode-JWT-deployment-errors#invalidemptyelement) |

<br />


### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "TokenExpired"` |
| `JWT.failed` | All JWT policies set the same variable in the case of a failure. | `JWT.failed = true` |

### Example error response

JWT Policy Fault Codes

For error handling, the best practice is to trap the `errorcode` part of the error
response. Do not rely on the text in the `faultstring`, because it could change.

### Example fault rule

```
    <FaultRules>
        <FaultRule name="JWT Policy Errors">
            <Step>
                <Name>JavaScript-1</Name>
                <Condition>(fault.name Matches "TokenExpired")</Condition>
            </Step>
            <Condition>JWT.failed=true</Condition>
        </FaultRule>
    </FaultRules>
    
```

<br />

## ExtractVariables policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.


> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.extractvariables.ExecutionFailed` | 500 | This error occurs when: - The input payload (JSON, XML) is empty. - The input (JSON, XML, etc) passed to the policy is invalid or malformed. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/extract-variables-runtime-errors#executionfailed) |
| `steps.extractvariables.ImmutableVariable` | 500 | A variable used in the policy is immutable. The policy was unable to set this variable. |   |
| `steps.extractvariables.InvalidJSONPath` | 500 | This error occurs if an invalid JSON path is used in the `JSONPath` element of the policy. For example, if a JSON payload does not have the object `Name`, but you specify `Name` as the path in the policy, then this error occurs. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/extract-variables-runtime-errors#invalidjsonpath) |
| `steps.extractvariables.JsonPathParsingFailure` | 500 | This error occurs when the policy is unable to parse a JSON path and extract data from the flow variable specified in `Source` element. Typically this happens if the flow variable specified in the `Source` element does not exist in the current flow. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/extract-variables-runtime-errors#jsonpathparsingfailure) |
| `steps.extractvariables.SetVariableFailed` | 500 | This error occurs if the policy could not set the value to a variable. The error generally happens if you try to assign values to multiple variables whose names start with the same words in a nested dot-separated format. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/extract-variables-runtime-errors#setvariablefailed) |
| `steps.extractvariables.SourceMessageNotAvailable` | 500 | This error occurs if the [message](https://docs.apigee.com/api-platform/reference/variables-reference#messagevariables) variable specified in the [`Source` element](https://docs.apigee.com/api-platform/reference/policies/extract-variables-policy#sourceelement) of the policy is either: - Out of scope (not available in the specific flow where the policy is being executed) or - Can't be resolved (is not defined) | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/extract-variables-runtime-errors#sourcemessagenotavailable) |
| `steps.extractvariables.UnableToCast` | 500 | This error occurs if the policy was unable to cast the extracted value to a variable. Typically this happens if you attempt to set the value of one data type to a variable of another data type. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/extract-variables-runtime-errors#unabletocast) |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click next to the error's cause description to visit the troubleshooting page.

| Error name | Cause | Fix |
|---|---|---|
| `NothingToExtract` | If the policy does not have any of the elements `URIPath`, `QueryParam`, `Header`, `FormParam`, `XMLPayload`, or `JSONPayload`, the deployment of the API Proxy fails, because there's nothing to extract. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/extract-variables-deployment-errors#nothingtoextract) |
| `NONEmptyPrefixMappedToEmptyURI` | This error occurs if the policy has a prefix defined in the `Namespace` element under the `XMLPayload` element, but no URI is defined. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/extract-variables-deployment-errors#nonemptyprefixmappedtoemptyuri) |
| `DuplicatePrefix` | This error occurs if the policy has the same prefix defined more than once in the `Namespace` element under the `XMLPayload` element. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/extract-variables-deployment-errors#duplicateprefix) |
| `NoXPathsToEvaluate` | If the policy does not have the `XPath` element within the `XMLPayload` element, then the deployment of the API proxy fails with this error. > [!NOTE] > If you want to extract variables from an XML Payload, then an `XPath` child element must be specified. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/extract-variables-deployment-errors#noxpathstoevaluate) |
| `EmptyXPathExpression` | If the policy has an empty `XPath` expression within the `XMLPayload` element, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/extract-variables-deployment-errors#emptyxpathexpression) |
| `NoJSONPathsToEvaluate` | If the policy does not have the `JSONPath` element within the `JSONPayload` element, then the deployment of the API proxy fails with this error. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/extract-variables-deployment-errors#nojsonpathstoevaluate) |
| `EmptyJSONPathExpression` | If the policy has an empty `XPath` expression within the `XMLPayload` element, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/extract-variables-deployment-errors#emptyjsonpathexpression) |
| `MissingName` | If the policy does not have the `name` attribute in any of the policy elements like `QueryParam`, `Header`, `FormParam` or `Variable`, where it is required, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/extract-variables-deployment-errors#missingname) |
| `PatternWithoutVariable` | If the policy does not have a variable specified within the `Pattern` element, then the deployment of the API proxy fails. The `Pattern` element requires the name of the variable in which extracted data will be stored. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/extract-variables-deployment-errors#patternwithoutvariable) |
| `CannotBeConvertedToNodeset` | If the policy has an `XPath` expression where the `Variable` type is defined as [nodeset](https://docs.microsoft.com/en-us/dotnet/standard/data/xml/node-sets-in-transformations), but the expression cannot be converted to nodeset, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/extract-variables-deployment-errors#cannotbeconvertedtonodeset) |
| `JSONPathCompilationFailed` | The policy could not compile a specified JSON Path. |   |
| `InstantiationFailed` | The policy could not be instantiated. |   |
| `XPathCompilationFailed` | If the prefix or the value used in the `XPath` element is not part of any of the declared namespaces in the policy, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/extract-variables-deployment-errors#xpathcompilationfailed) |
| `InvalidPattern` | If the `Pattern` element definition is invalid in any of the elements like `URIPath`, `QueryParam`, `Header`, `FormParam`, `XMLPayload` or `JSONPayload` within the policy, then the deployment of the API proxy fails. > [!NOTE] > The `Pattern` element is considered invalid if it doesn't include a variable. For more information about pattern matching, see [About matching and variable creation](https://docs.apigee.com/api-platform/reference/policies/extract-variables-policy#about-matching-variable-creation). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/extract-variables-deployment-errors#invalidpattern) |

### Fault variables

These variables are set when this policy triggers an error at runtime. For more information,
see [What you
need to know about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name = "SourceMessageNotAvailable"` |
| `extractvariables.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `extractvariables.EV-ParseJsonResponse.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{
   "fault":{
      "detail":{
         "errorcode":"steps.extractvariables.SourceMessageNotAvailable"
      },
      "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse"
   }
}
```

### Example fault rule

```
<FaultRule name="Extract Variable Faults">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name = "SourceMessageNotAvailable") </Condition>
    </Step>
    <Condition>(extractvariables.EM-ParseJsonResponse.failed = true) </Condition>
</FaultRule>
```

<br />

## GenerateJWS policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to handle faults.
To learn more, see [What you need to know about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors)
and [Handling faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Occurs when |
|---|---|---|
| `steps.jws.GenerationFailed` | 401 | The policy was unable to generate the JWS. |
| `steps.jws.InsufficientKeyLength` | 401 | For a key less than 32 bytes for the HS256 algorithm |
| `steps.jws.InvalidClaim` | 401 | For a missing claim or claim mismatch, or a missing header or header mismatch. |
| `steps.jws.InvalidCurve` | 401 | The curve specified by the key is not valid for the Elliptic Curve algorithm. |
| `steps.jws.InvalidJsonFormat` | 401 | Invalid JSON found in the JWS header. |
| `steps.jws.InvalidPayload` | 401 | The JWS payload is invalid. |
| `steps.jws.InvalidSignature` | 401 | `<DetachedContent>` is omitted and the JWS has a detached content payload. |
| `steps.jws.KeyIdMissing` | 401 | The Verify policy uses a JWKS as a source for public keys, but the signed JWS does not include a `kid` property in the header. |
| `steps.jws.KeyParsingFailed` | 401 | The public key could not be parsed from the given key information. |
| `steps.jws.MissingPayload` | 401 | The JWS payload is missing. |
| `steps.jws.NoAlgorithmFoundInHeader` | 401 | Occurs when the JWS omits the algorithm header. |
| `steps.jws.SigningFailed` | 401 | In GenerateJWS, for a key less than the minimum size for the HS384 or HS512 algorithms |
| `steps.jws.UnknownException` | 401 | An unknown exception occurred. |
| `steps.jws.WrongKeyType` | 401 | Wrong type of key specified. For example, if you specify an RSA key for an Elliptic Curve algorithm, or a curve key for an RSA algorithm. |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

| Error name | Occurs when |
|---|---|
| `InvalidAlgorithm` | The only valid values are: RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512, HS256, HS384, HS512. |
| `EmptyElementForKeyConfiguration` `FailedToResolveVariable` `InvalidConfigurationForActionAndAlgorithmFamily` `InvalidConfigurationForVerify` `InvalidEmptyElement` `InvalidFamiliesForAlgorithm` `InvalidKeyConfiguration` `InvalidNameForAdditionalClaim` `InvalidNameForAdditionalHeader` `InvalidPublicKeyId` `InvalidPublicKeyValue` `InvalidSecretInConfig` `InvalidTypeForAdditionalClaim` `InvalidTypeForAdditionalHeader` `InvalidValueForElement` `InvalidValueOfArrayAttribute` `InvalidVariableNameForSecret` `MissingConfigurationElement` `MissingElementForKeyConfiguration` `MissingNameForAdditionalClaim` `MissingNameForAdditionalHeader` | Other possible deployment errors. |

<br />


### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "TokenExpired"` |
| `JWS.failed` | All JWS policies set the same variable in the case of a failure. | `jws.JWS-Policy.failed = true` |

### Example error response

For error handling, the best practice is to trap the `errorcode` part of the error
response. Do not rely on the text in the `faultstring`, because it could change.

### Example fault rule

```
<FaultRules>
    <FaultRule name="JWS Policy Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "TokenExpired")</Condition>
        </Step>
        <Condition>JWS.failed=true</Condition>
    </FaultRule>
</FaultRules>
```

<br />

## GenerateJWT policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Occurs when |
|---|---|---|
| `steps.jwt.AlgorithmInTokenNotPresentInConfiguration` | 401 | Occurs when the verification policy has multiple algorithms. |
| `steps.jwt.AlgorithmMismatch` | 401 | The algorithm specified in the Generate policy did not match the one expected in the Verify policy. The algorithms specified must match. |
| `steps.jwt.FailedToDecode` | 401 | The policy was unable to decode the JWT. The JWT is possibly corrupted. |
| `steps.jwt.GenerationFailed` | 401 | The policy was unable to generate the JWT. |
| `steps.jwt.InsufficientKeyLength` | 401 | For a key less than 32 bytes for the HS256 algorithm, less than 48 bytes for the HS386 algortithm, and less than 64 bytes for the HS512 algorithm. |
| `steps.jwt.InvalidClaim` | 401 | For a missing claim or claim mismatch, or a missing header or header mismatch. |
| `steps.jwt.InvalidCurve` | 401 | The curve specified by the key is not valid for the Elliptic Curve algorithm. |
| `steps.jwt.InvalidJsonFormat` | 401 | Invalid JSON found in the header or payload. |
| `steps.jwt.InvalidToken` | 401 | This error occurs when the JWT signature verification fails. |
| `steps.jwt.JwtAudienceMismatch` | 401 | The audience claim failed on token verification. |
| `steps.jwt.JwtIssuerMismatch` | 401 | The issuer claim failed on token verification. |
| `steps.jwt.JwtSubjectMismatch` | 401 | The subject claim failed on token verification. |
| `steps.jwt.KeyIdMissing` | 401 | The Verify policy uses a JWKS as a source for public keys, but the signed JWT does not include a `kid` property in the header. |
| `steps.jwt.KeyParsingFailed` | 401 | The public key could not be parsed from the given key information. |
| `steps.jwt.NoAlgorithmFoundInHeader` | 401 | Occurs when the JWT contains no algorithm header. |
| `steps.jwt.NoMatchingPublicKey` | 401 | The Verify policy uses a JWKS as a source for public keys, but the `kid` in the signed JWT is not listed in the JWKS. |
| `steps.jwt.SigningFailed` | 401 | In GenerateJWT, for a key less than the minimum size for the HS384 or HS512 algorithms |
| `steps.jwt.TokenExpired` | 401 | The policy attempts to verify an expired token. |
| `steps.jwt.TokenNotYetValid` | 401 | The token is not yet valid. |
| `steps.jwt.UnhandledCriticalHeader` | 401 | A header found by the Verify JWT policy in the `crit` header is not listed in `KnownHeaders`. |
| `steps.jwt.UnknownException` | 401 | An unknown exception occurred. |
| `steps.jwt.WrongKeyType` | 401 | Wrong type of key specified. For example, if you specify an RSA key for an Elliptic Curve algorithm, or a curve key for an RSA algorithm. |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

| Error name | Cause | Fix |
|---|---|---|
| **`InvalidNameForAdditionalClaim`** | The deployment will fail if the claim used in the child element `<Claim>` of the `<AdditionalClaims>` element is one of the following registered names: `kid`, `iss`, `sub`, `aud`, `iat`, `exp`, `nbf`, or `jti`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#invalidnameforadditionalclaim) |
| **`InvalidTypeForAdditionalClaim`** | If the claim used in the child element `<Claim>` of the `<AdditionalClaims>` element is not of type `string`, `number`, `boolean`, or `map`, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#invalidtypeforadditionalclaim) |
| **`MissingNameForAdditionalClaim`** | If the name of the claim is not specified in the child element `<Claim>` of the `<AdditionalClaims>` element, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#missingnameforadditionalclaim) |
| **`InvalidNameForAdditionalHeader`** | This error ccurs when the name of the claim used in the child element `<Claim>` of the `<AdditionalClaims>` element is either `alg` or `typ`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#invalidnameforadditionalheader) |
| **`InvalidTypeForAdditionalHeader`** | If the type of claim used in the child element `<Claim>` of the `<AdditionalClaims>` element is not of type `string`, `number`, `boolean`, or `map`, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#invalidtypeforadditionalheader) |
| **`InvalidValueOfArrayAttribute`** | This error occurs when the value of the array attribute in the child element `<Claim>` of the `<AdditionalClaims>` element is not set to `true` or `false`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#invalidvalueofarrayattribute) |
| **`InvalidConfigurationForActionAndAlgorithm`** | If the `<PrivateKey>` element is used with HS Family algorithms or the `<SecretKey>` element is used with RSA Family algorithms, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#invalidconfigurationforactionandalgorithm) |
| **`InvalidValueForElement`** | If the value specified in the `<Algorithm>` element is not a supported value, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#invalidvalueforelement) |
| **`MissingConfigurationElement`** | This error will occur if the `<PrivateKey>` element is not used with RSA family algorithms or the `<SecretKey>` element is not used with HS Family algorithms. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#missingconfigurationelement) |
| **`InvalidKeyConfiguration`** | If the child element `<Value>` is not defined in the `<PrivateKey>` or `<SecretKey>` elements, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#invalidkeyconfiguration) |
| **`EmptyElementForKeyConfiguration`** | If the ref attribute of the child element `<Value>` of the `<PrivateKey>` or `<SecretKey>` elements is empty or unspecified, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#emptyelementforkeyconfiguration) |
| **`InvalidVariableNameForSecret`** | This error occurs if the flow variable name specified in the ref attribute of the child element `<Value>` of the `<PrivateKey>` or `<SecretKey>` elements does not contain the private prefix `(private.)`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#invalidvariablenameforsecret) |
| **`InvalidSecretInConfig`** | This error occurs if the child element `<Value>` of the `<PrivateKey>` or `<SecretKey>` elements does not contain the private prefix `(private.)`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#invalidsecretinconfig) |
| **`InvalidTimeFormat`** | If the value specified in the`<NotBefore>` element does not use a supported format, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/generate-JWT-deployment-errors#invalidtimeformat) |

<br />


### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "TokenExpired"` |
| `JWT.failed` | All JWT policies set the same variable in the case of a failure. | `JWT.failed = true` |

### Example error response

JWT Policy Fault Codes

For error handling, the best practice is to trap the `errorcode` part of the error
response. Do not rely on the text in the `faultstring`, because it could change.

### Example fault rule

```
    <FaultRules>
        <FaultRule name="JWT Policy Errors">
            <Step>
                <Name>JavaScript-1</Name>
                <Condition>(fault.name Matches "TokenExpired")</Condition>
            </Step>
            <Condition>JWT.failed=true</Condition>
        </FaultRule>
    </FaultRules>
    
```

<br />

## JavaCallout policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| ` steps.javacallout.ExecutionError` | 500 | Occurs when Java code throws an exception or returns null during the execution of a JavaCallout policy. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/java-callout-runtime-errors#executionerror) |

### Deployment errors

These errors can occur when the proxy containing the policy is deployed.

| Error name | Fault string | HTTP status | Occurs when |
|---|---|---|---|
| ` ResourceDoesNotExist` | ` Resource with name [name] and type [type] does not exist` | N/A | The file specified in the `<ResourceURL>` element does not exist. |
| `JavaCalloutInstantiationFailed` | `Failed to instantiate the JavaCallout Class [classname]` | N/A | The class file specified in the `<ClassName>` element is not in the jar. |
| `IncompatibleJavaVersion` | `Failed to load java class [classname] definition due to - [reason]` | N/A | See fault string. See also [Supported software and supported versions](https://docs.apigee.com/release/supported-software). |
| `JavaClassNotFoundInJavaResource` | `Failed to find the ClassName in java resource [jar_name] - [class_name]` | N/A | See fault string. |
| `JavaClassDefinitionNotFound` | `Failed to load java class [class_name] definition due to - [reason]` | N/A | See fault string. |
| `NoAppropriateConstructor` | `No appropriate constructor found in JavaCallout class [class_name]` | N/A | See fault string. |
| `NoResourceForURL` | `Could not locate a resource with URL [string]` | N/A | See fault string. |

### Fault variables

These variables are set when this policy triggers an error. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "ExecutionError"` |
| `javacallout.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `javacallout.JC-GetUserData.failed = true` |

### Example error response

```java
{  
   "fault":{  
      "faultstring":"Failed to execute JavaCallout. [policy_name]",
      "detail":{  
         "errorcode":"javacallout.ExecutionError"
      }
   }
}
```

### Example fault rule

```java
<FaultRule name="JavaCalloutFailed">
    <Step>
        <Name>AM-JavaCalloutError</Name>
    </Step>
    <Condition>(fault.name Matches "ExecutionError") </Condition>
</FaultRule>
```

<br />

## JavaScript policy


This section describes the fault codes and error messages that are returned and fault variables
that are set by Edge when this policy triggers an error. This information is important to know
if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.
>
> Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.javascript.ScriptExecutionFailed` | 500 | The JavaScript policy can throw many different types of ScriptExecutionFailed errors. Commonly seen types of errors include [RangeError](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/javascript-runtime-errors#range_error), [ReferenceError](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/javascript-runtime-errors#reference_error), [SyntaxError](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/javascript-runtime-errors#syntax_error), [TypeError](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/javascript-runtime-errors#type_error), and [URIError](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/javascript-runtime-errors#uri_error). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/javascript-runtime-errors#scriptexecutionfailed) |
| `steps.javascript.ScriptExecutionFailedLineNumber` | 500 | An error occurred in the JavaScript code. See the fault string for details. | N/A |
| `steps.javascript.ScriptSecurityError` | 500 | A security error occurred when the JavaScript executed. See the fault string for details. | N/A |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click next to the error's cause description to visit the troubleshooting page.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidResourceUrlFormat` | If the format of the resource URL specified within the `<ResourceURL>` or the `<IncludeURL>` element of the JavaScript policy is invalid, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/javascript-deployment-errors#invalidresourceurlformat) |
| `InvalidResourceUrlReference` | If the `<ResourceURL>` or the `<IncludeURL>` elements refer to a JavaScript file that does not exist, then the deployment of the API proxy fails. The referenced source file must exist either the API proxy, environment, or organization level. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/javascript-deployment-errors#invalidresourceurlreference) |
| `WrongResourceType` | This error occurs during deployment if the `<ResourceURL>` or the `<IncludeURL>` elements of the JavaScript policy refer to any resource type other than **jsc** (JavaScript file). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/javascript-deployment-errors#wrongresourcetype) |
| `NoResourceURLOrSource` | The deployment of the JavaScript policy can fail with this error if the `<ResourceURL>` element is not declared or if the resource URL is not defined within this element. `<ResourceURL>` element is a mandatory element. Or, The `<IncludeURL>` element is declared but the resource URL is not defined within this element. The `<IncludeURL>` element is optional but if declared, the resource URL must be specified within the `<IncludeURL>` element. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/javascript-deployment-errors#noresourceurlorsource) |

### Fault variables

These variables are set when this policy triggers an error at runtime. For more information,
see [What you
need to know about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "ScriptExecutionFailed"` |
| `javascript.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `javascript.JavaScript-1.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```javascript
{
  "fault": {
    "faultstring": "Execution of SetResponse failed with error: Javascript runtime error: "ReferenceError: "status" is not defined. (setresponse.js:6)\"",
    "detail": {
      "errorcode": "steps.javascript.ScriptExecutionFailed"
    }
  }
}
```

### Example fault rule

```javascript
<FaultRule name="JavaScript Policy Faults">
    <Step>
        <Name>AM-CustomErrorResponse</Name>
        <Condition>(fault.name Matches "ScriptExecutionFailed") </Condition>
    </Step>
    <Condition>(javascript.JavaScript-1.failed = true) </Condition>
</FaultRule>
```

<br />

## JSONThreatProtection policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.jsonthreatprotection.ExecutionFailed` | 500 | The JSONThreatProtection policy can throw many different types of ExecutionFailed errors. Most of these errors occur when a specific threshold set in the policy is exceeded. These types of errors include: [object entry name length](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsonthreatprotection-errors#exceededobjectentrynamelength), [object entry count](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsonthreatprotection-errors#exceededobjectentrycount), [array element count](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsonthreatprotection-errors#exceededarrayelementcount), [container depth](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsonthreatprotection-errors#exceededcontainerdepth), [string string value length](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsonthreatprotection-errors#exceededstringvaluelength). This error also occurs when the payload contains an [invalid JSON object](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsonthreatprotection-errors#not_valid_json_object). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsonthreatprotection-errors#executionfailed) |
| `steps.jsonthreatprotection.SourceUnavailable` | 500 | This error occurs if the [message](https://docs.apigee.com/api-platform/reference/variables-reference#message) variable specified in the `<Source>` element is either: - Out of scope (not available in the specific flow where the policy is being executed) - Is not one of the valid values `request`, `response`, or `message` | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsonthreatprotection-errors#sourceunavailable) |
| `steps.jsonthreatprotection.NonMessageVariable` | 500 | This error occurs if the `<Source>` element is set to a variable which is not of type [message](https://docs.apigee.com/api-platform/reference/variables-reference#message). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsonthreatprotection-errors#nonmessagevariable) |

### Deployment errors

None.

### Fault variables

These variables are set when this policy triggers an error. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "SourceUnavailable"` |
| `jsonattack.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `jsonattack.JTP-SecureRequest.failed = true` |

### Example error response

```
{
  "fault": {
    "faultstring": "JSONThreatProtection[JPT-SecureRequest]: Execution failed. reason: JSONThreatProtection[JTP-SecureRequest]: Exceeded object entry name length at line 2",
    "detail": {
      "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
    }
  }
}
```

### Example fault rule

```
<FaultRule name="JSONThreatProtection Policy Faults">
    <Step>
        <Name>AM-CustomErrorResponse</Name>
        <Condition>(fault.name Matches "ExecutionFailed") </Condition>
    </Step>
    <Condition>(jsonattack.JPT-SecureRequest.failed = true) </Condition>
</FaultRule>
```

<br />

The JSONThreatProtection policy types defines the following error codes:

## JSONtoXML policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.jsontoxml.ExecutionFailed` | 500 | The input payload (JSON) is empty or the input (JSON) passed to JSON to XML policy is invalid or malformed. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsontoxml-runtime-errors#executionfailed) |
| `steps.jsontoxml.InCompatibleTypes` | 500 | This error occurs if the type of the variable defined in the `<Source>` element and the `<OutputVariable>` element are not the same. It is mandatory that the type of the variables contained within the `<Source>` element and the `<OutputVariable>` element matches. The valid types are `message` and `string`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsontoxml-runtime-errors#incompatibletypes) |
| `steps.jsontoxml.InvalidSourceType` | 500 | This error occurs if the type of the variable used to define the `<Source>` element is invalid. The valid types of variable are `message` and `string`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsontoxml-runtime-errors#invalidsourcetype) |
| `steps.jsontoxml.OutputVariableIsNotAvailable` | 500 | This error occurs if the variable specified in the `<Source>` element of the JSON to XML Policy is of type string and the `<OutputVariable>` element is not defined. The `<OutputVariable>` element is mandatory when the variable defined in the `<Source>` element is of type string. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsontoxml-runtime-errors#outputvariableisnotavailable) |
| `steps.jsontoxml.SourceUnavailable` | 500 | This error occurs if the [message](https://docs.apigee.com/api-platform/reference/variables-reference#messagevariables) variable specified in the `<Source>` element of the JSON to XML policy is either: - out of scope (not available in the specific flow where the policy is being executed) or - can't be resolved (is not defined) | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/jsontoxml-runtime-errors#sourceunavailable) |

### Deployment errors

None.

### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "SourceUnavailable"` |
| `jsontoxml.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `jsontoxml.JSON-to-XML-1.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{
  "fault": {
    "faultstring": "JSONToXML[JSON-to-XML-1]: Source xyz is not available",
    "detail": {
      "errorcode": "steps.json2xml.SourceUnavailable"
    }
  }
}
```

### Example fault rule

```
<FaultRule name="JSON To XML Faults">
    <Step>
        <Name>AM-SourceUnavailableMessage</Name>
        <Condition>(fault.name Matches "SourceUnavailable") </Condition>
    </Step>
    <Step>
        <Name>AM-BadJSON</Name>
        <Condition>(fault.name = "ExecutionFailed")</Condition>
    </Step>
    <Condition>(jsontoxml.JSON-to-XML-1.failed = true) </Condition>
</FaultRule>
```

<br />

## KeyValueMapOperations policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.keyvaluemapoperations.SetVariableFailed` | 500 | This error occurs if you try to retrieve a value from an encrypted key value map and set the value to a variable whose name does not have the prefix `private`. The prefix, which is required for basic security purposes during debugging, hides the encrypted values from API proxy Trace and debug sessions. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/key-value-map-runtime-errors#setvariablefailed) |
| `steps.keyvaluemapoperations.UnsupportedOperationException` | 500 | This error occurs if the `mapIdentifier` attribute is set to empty string in the Key Value Map Operations policy. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/key-value-map-runtime-errors#unsupportedoperationexception) |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidIndex` | If the `index` attribute specified in the `<Get>` element of Key Value Map Operations policy is zero or a negative number, then the deployment of the API proxy fails. The index starts from `1`, so an index of zero or negative integer is considered as invalid. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/key-value-map-deployment-errors#invalidindex) |
| `KeyIsMissing` | This error occurs if the `<Key>` element is completely missing or `<Parameter>` element is missing within `<Key>` element underneath the `<Entry>` of the `<InitialEntries>` element of the Key Value Map Operations policy. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/key-value-map-deployment-errors#keyismissing) |
| `ValueIsMissing` | This error occurs if the `<Value>` element is missing underneath the `<Entry>` element of the `<InitialEntries>` element of the Key Value Map Operations policy. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/key-value-map-deployment-errors#valueismissing) |

<br />

## LDAP policy


This policy uses the following error codes:

| Error Code | Message |
|---|---|
| `InvalidAttributeName` | `Invalid attribute name {0}.` |
| `InvalidSearchBase` | `Search base can not be empty.` |
| `InvalidValueForPassword` | `Invalid value for password field. It can not be empty.` |
| `InvalidSearchScope` | `Invalid scope {0}. Allowed scopes are {1}.` |
| `InvalidUserCredentials` | `Invalid user credentials.` |
| `InvalidExternalLdapReference` | `Invalid external ldap reference {0}.` |
| `LdapResourceNotFound` | `Ldap resource {0} not found.` |
| `BaseDNRequired` | `Base DN required.` |
| `OnlyReferenceOrValueIsAllowed` | `Only value or reference is allowed for {0}.` |
| `AttributesRequired` | `At least one attribute required for search action.` |
| `UserNameIsNull` | `User name is null.` |
| `SearchQueryAndUserNameCannotBePresent` | `Both search query and username can not be present in the authentication action. Please specify either one of them.` |

<br />

## MessageLogging policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause |
|---|---|---|
| `steps.messagelogging.StepDefinitionExecutionFailed` | 500 | See fault string. |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidProtocol` | The deployment of the MessageLogging policy can fail with this error if the protocol specified within the `<Protocol>` element is not valid. The valid protocols are TCP and UDP. For sending syslog messages over TLS/SSL, only TCP is supported. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/message-logging-deployment-errors#invalidprotocol) |
| `InvalidPort` | The deployment of the MessageLogging policy can fail with this error if the port number is not specified within the `<Port>` element or if it is not valid. The port number must be an integer greater than zero. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/message-logging-deployment-errors#invalidport) |

### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

> [!NOTE]
> **Note:** **Proxy calls succeed when logging fails**
>
> There's a difference between policy errors and message logging errors. The flow variables
> here are populated only when the policy itself fails, not when message logging fails. Because
> message logging is first written to buffer, the API proxy will continue successful execution
> even if message logging ultimately fails (for example, if there's a connection failure to the
> external syslog provider). Be sure to check your logs on a regular basis to make sure logging
> is happening as expected.

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "StepDefinitionExecutionFailed"` |
| `messagelogging.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `messagelogging.ML-LogMessages.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.messagelogging.StepDefinitionExecutionFailed"
      },
      "faultstring":"Execution failed"
   }
}
```

### Example fault rule

```
<FaultRule name="MessageLogging">
    <Step>
        <Name>ML-LogMessages</Name>
        <Condition>(fault.name Matches "StepDefinitionExecutionFailed") </Condition>
    </Step>
    <Condition>(messagelogging.ML-LogMessages.failed = true) </Condition>
</FaultRule>
```

<br />

## OASValidation policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause |
|---|---|---|---|
| `steps.oasvalidation.Failed` | 500 | Request message body cannot be validated against the provided OpenAPI Specification. |
| `steps.oasvalidation.SourceMessageNotAvailable` | 500 | Variable specified in the `<Source>` element of the policy is either out of scope or cannot be resolved. |
| `steps.oasvalidation.NotMessageVariable` | 500 | `<Source>` element is set to a variable that is not of type [message](https://docs.apigee.com/api-platform/reference/variables-reference#message). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/assign-message-runtime-errors#unresolvedvariable) |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

| Error name | Cause |
|---|---|---|
| `ResourceDoesNotExist` | OpenAPI Specification referenced in the `<OASResource>` element does not exist. |
| `ResourceCompileFailed` | OpenAPI Specification that is included in the deployment contains errors that prevent it from being compiled. This generally indicates that the specification is not a well-formed OpenAPI Specification 3.0. |
| `BadResourceURL` | OpenAPI Specification referenced in the `<OASResource>` element cannot be processed. This can occur if the file is not a JSON or YAML file or the file URL is not specified correctly. |   |

### Fault variables

These variables are set when this policy triggers an error at runtime. For more information,
see [What you
need to know about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "ResourceDoesNotExist"` |
| `oasvalidation.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oasvalidation.myoaspolicy.failed = true` |

<br />

## PopulateCache policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP Status | Occurs when |
|---|---|---|
| `policies.populatecache.EntryCannotBeCached` | 500 | An entry cannot be cached. The message object being cached is not an instance of a class that is Serializable. |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidCacheResourceReference` | This error occurs if the `<CacheResource>` element in the PopulateCache policy is set to a name that does not exist in the environment where the API proxy is being deployed. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/populate-cache-deployment-errors#invalidcacheresourcereference) |
| `CacheNotFound` | The cache specified in the `<CacheResource>` element does not exist. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/populate-cache-deployment-errors#cachenotfound) |

### Fault variables

These variables are set when this policy triggers an error. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name = "EntryCannotBeCached"` |
| `populatecache.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `populatecache.POP-CACHE-1.failed = true` |

### Example error response

```
{
  "fault": {
    "faultstring": "[entry] can not be cached. Only serializable entries are cached.",
    "detail": {
      "errorcode": "steps.populatecache.EntryCannotBeCached"
    }
  }
}
```

### Example fault rule

```
<FaultRule name="Populate Cache Fault">
    <Step>
        <Name>AM-EntryCannotBeCached</Name>
        <Condition>(fault.name Matches "EntryCannotBeCached") </Condition>
    </Step>
    <Condition>(populatecache.POP-CACHE-1.failed = true) </Condition>
</FaultRule>
```

<br />

## LookupCache policy


This section describes the error messages and flow variables that are set when this policy
triggers an error. This information is important to know if you are developing fault rules for a
proxy. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Error code prefix

N/A

### Runtime errors

This policy does not throw any runtime errors.

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidCacheResourceReference` | This error occurs if the `<CacheResource>` element is set to a name which does not exist in the environment where the API proxy is being deployed. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/lookup-cache-deployment-errors#invalidcacheresourcereference) |
| `InvalidTimeout` | If the `<CacheLookupTimeoutInSeconds>` element is set to a negative number, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/lookup-cache-deployment-errors#invalidtimeout) |
| `CacheNotFound` | This error occurs if the specific cache mentioned in the error message has not been created on a specific Message Processor component. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/lookup-cache-deployment-errors#cachenotfound) |

### Fault variables

N/A

### Example error response

N/A

<br />

## InvalidateCache policy


This section describes the error messages and flow variables that are set when this policy
triggers an error. This information is important to know if you are developing fault rules for a
proxy. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Error code prefix

N/A

### Runtime errors

This policy does not throw any runtime errors.

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidCacheResourceReference` | This error occurs if the `<CacheResource>` element in the InvalidateCache policy is set to a name that does not exist in the environment where the API proxy is being deployed. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/invalidate-cache-deployment-errors#invalidcacheresourcereference) |
| `CacheNotFound` | This error occurs if the specific cache mentioned in the error message has not been created on a specific Message Processor component. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/invalidate-cache-deployment-errors#cachenotfound) |

### Fault variables

N/A

### Example error response

N/A

<br />

## ResponseCache policy


This section describes the error messages and flow variables that are set when this policy
triggers an error. This information is important to know if you are developing fault rules for a
proxy. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Error code prefix

N/A

### Runtime errors

This policy does not throw any runtime errors.

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidTimeout` | If the `<CacheLookupTimeoutInSeconds>` element of the ResponseCache policy is set to a negative number, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/responsecache-deployment-errors#invalidtimeout) |
| `InvalidCacheResourceReference` | This error occurs if the `<CacheResource>` element in a ResponseCache policy is set to a name that does not exist in the environment where the API proxy is being deployed. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/responsecache-deployment-errors#invalidcacheresourcereference) |
| `ResponseCacheStepAttachmentNotAllowedReq` | This error occurs if the same ResponseCache policy is attached to multiple request paths within any flows of an API proxy. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/responsecache-deployment-errors#responsecachestepattachmentnotallowedreq) |
| `ResponseCacheStepAttachmentNotAllowedResp` | This error occurs if the same ResponseCache policy is attached to multiple response paths within any flows of an API proxy. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/responsecache-deployment-errors#responsecachestepattachmentnotallowedresp) |
| `InvalidMessagePatternForErrorCode` | This error occurs if either the `<SkipCacheLookup>` or the `<SkipCachePopulation>` element in a ResponseCache policy contains an invalid condition. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/responsecache-deployment-errors#invalidmessagepatternforerrorcode) |
| `CacheNotFound` | This error occurs if the specific cache mentioned in the error message has not been created on a specific Message Processor component. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/responsecache-deployment-errors#cachenotfound) |

### Fault variables

N/A

### Example error response

N/A

<br />

## OAuthV2 policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Thrown by operations |
|---|---|---|---|
| `steps.oauth.v2.access_token_expired` | 401 | The access token is expired. | VerifyAccessToken InvalidateToken |
| `steps.oauth.v2.access_token_not_approved` | 401 | The access token was revoked. | VerifyAccessToken |
| `steps.oauth.v2.apiresource_doesnot_exist` | 401 | The requested resource does not exist any of the API products associated with the access token. | VerifyAccessToken |
| `steps.oauth.v2.FailedToResolveAccessToken` | 500 | The policy expected to find an access token in a variable specified in the `<AccessToken>` element, but the variable could not be resolved. | GenerateAccessToken |
| `steps.oauth.v2.FailedToResolveAuthorizationCode` | 500 | The policy expected to find an authorization code in a variable specified in the `<Code>` element, but the variable could not be resolved. | GenerateAuthorizationCode |
| `steps.oauth.v2.FailedToResolveClientId` | 500 | The policy expected to find the Client ID in a variable specified in the `<ClientId>` element, but the variable could not be resolved. | GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
| `steps.oauth.v2.FailedToResolveRefreshToken` | 500 | The policy expected to find a refresh token in a variable specified in the `<RefreshToken>` element, but the variable could not be resolved. | RefreshAccessToken |
| `steps.oauth.v2.FailedToResolveToken` | 500 | The policy expected to find a token in a variable specified in the `<Tokens>` element, but the variable could not be resolved. | ValidateToken InvalidateToken |
| `steps.oauth.v2.InsufficientScope` | 403 | The access token presented in the request has a scope that does not match the scope specified in the verify access token policy. To learn about scope, see [Working with OAuth2 scopes](https://docs.apigee.com/api-platform/security/oauth/working-scopes). | VerifyAccessToken |
| `steps.oauth.v2.invalid_access_token` | 401 | The access token sent from the client is invalid. | VerifyAccessToken |
| `steps.oauth.v2.invalid_client` | 401 | This error name is returned when the `<GenerateResponse>` property of the policy is set to **true** and the client ID sent in the request is invalid. Check to be sure you are using the correct client key and secret values for the Developer App associated with your proxy. Typically, these values are sent as a Base64 encoded Basic Authorization header. **Note:** It is recommended that you change existing fault rule conditions to catch both the `invalid_client` and `InvalidClientIdentifier` names. See the [16.09.21 Release Notes](https://docs.apigee.com/release/notes/160921-apigee-edge-public-cloud-release-notes) for more information and an example. | GenerateAccessToken RefreshAccessToken |
| `steps.oauth.v2.InvalidRequest` | 400 | This error name is used for multiple different kinds of errors, typically for missing or incorrect parameters sent in the request. If `<GenerateResponse>` is set to `false`, use fault variables (described below) to retrieve details about the error, such as the fault name and cause. | GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
| `steps.oauth.v2.InvalidAccessToken` | 401 | The authorization header does not have the word "Bearer", which is required. For example: `Authorization: Bearer your_access_token` | VerifyAccessToken |
| `steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound` | 401 | The API proxy is not in the Product associated with the access token. **Tips:** Be sure that the product associated with the access token is configured correctly. For example, if you use wildcards in resource paths, be sure the wildcards are being used correctly. See [Create API products](https://docs.apigee.com/api-platform/publish/create-api-products) for details. See also [this Apigee Community post](https://discuss.google.dev/t/oauth2-0-access-token-verification-throws-invalid-api-call-as-no-apiproduct-match-found-error/17064) for more guidance on causes for this error. | VerifyAccessToken |
| `steps.oauth.v2.InvalidClientIdentifier` | 500 | This error name is returned when the `<GenerateResponse>` property of the policy is set to **false** and the client ID sent in the request is invalid. Check to be sure you are using the correct client key and secret values for the Developer App associated with your proxy. Typically, these values are sent as a Base64 encoded Basic Authorization header. <br /> **Note:** In this situation, this error used to be called `invalid_client`. It is recommended that you change existing fault rule conditions to catch both the `invalid_client` and `InvalidClientIdentifier` names. See the [16.09.21 Release Notes](https://docs.apigee.com/release/notes/160921-apigee-edge-public-cloud-release-notes) for more information and an example. | GenerateAccessToken RefreshAccessToken |
| `steps.oauth.v2.InvalidParameter` | 500 | The policy must specify either an access token or an authorization code, but not both. | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
| `steps.oauth.v2.InvalidTokenType` | 500 | The `<Tokens>/<Token>` element requires you to specify the token type (for example, `refreshtoken`). If the client passes the wrong type, this error is thrown. | ValidateToken InvalidateToken |
| `steps.oauth.v2.MissingParameter` | 500 | The response type is `token`, but no grant types are specified. | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
| `steps.oauth.v2.UnSupportedGrantType` | 500 | The client specified a grant type that is unsupported by the policy (not listed in the \<SupportedGrantTypes\> element). **Note:** There is currently a bug where unsupported grant type errors are not thrown correctly. If an unsupported grant type error occurs, the proxy does not enter the Error Flow, as expected. | GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

| Error name | Cause |
|---|---|
| `InvalidValueForExpiresIn` | For the `<ExpiresIn>` element, valid values are positive integers and `-1`. |
| `InvalidValueForRefreshTokenExpiresIn` | For the `<RefreshTokenExpiresIn>` element, valid values are positive integers and `-1`. |
| `InvalidGrantType` | An invalid grant type is specified in the `<SupportedGrantTypes>` element. See the policy reference for a list of valid types. |
| `ExpiresInNotApplicableForOperation` | Be sure that the operations specified in the \<Operations\> element support expiration. For example, the VerifyToken operation does not. |
| `RefreshTokenExpiresInNotApplicableForOperation` | Be sure that the operations specified in the \<Operations\> element support refresh token expiration. For example, the VerifyToken operation does not. |
| `GrantTypesNotApplicableForOperation` | Be sure that the grant types specified in \<SupportedGrantTypes\> are supported for the specified operation. |
| `OperationRequired` | You must specify an operation in this policy using the `<Operation>` element. **Note:** If the `<Operation>` element is missing, the UI throws a schema validation error. |
| `InvalidOperation` | You must specify a valid operation in this policy using the `<Operation>` element. **Note:** If the `<Operation>` element is invalid, the UI throws a schema validation error. |
| `TokenValueRequired` | You must specify a token `<Token>` value in the `<Tokens>` element. |

### Fault variables

These variables are set when this policy triggers an error at runtime.

> [!NOTE]
> **Note:** You an use these variables to create Fault Rule conditions. These variables are populated when an error occurs if **`<GenerateResponse>`** is set to **`false`** . If `<GenerateResponse>` is `true`, the policy returns a response to the client immediately if an error occurs -- the error flow is skipped and these variables are not populated. For more information, see [What you need to
> know about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name = "InvalidRequest"` |
| `oauthV2.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.GenerateAccesstoken.failed = true` |
| `oauthV2.policy_name.fault.name` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.GenerateAccesstoken.fault.name = InvalidRequest` **Note** : For the VerifyAccessToken operation, the fault name includes this suffix: `keymanagement.service` For example: `keymanagement.service.invalid_access_token` |
| `oauthV2.policy_name.fault.cause` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.GenerateAccesstoken.cause = Required param : grant_type` |

### Example error response

These responses are sent back to the client if the `<GenerateResponse>`
element is **true**.

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

If `<GenerateResponse>` is **true** , the policy returns errors
in this format for operations that generate tokens and codes. For a complete list, see see
[OAuth HTTP error
response reference](https://docs.apigee.com/api-platform/reference/policies/oauth-http-status-code-reference).

```
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}
```

If `<GenerateResponse>` is **true** , the policy returns errors
in this format for verify and validate operations. For a complete list, see see [OAuth HTTP error
response reference](https://docs.apigee.com/api-platform/reference/policies/oauth-http-status-code-reference).

```
{  
   {  
      "fault":{  
         "faultstring":"Invalid Access Token",
         "detail":{  
            "errorcode":"keymanagement.service.invalid_access_token"
         }
      }
   }
```

### Example fault rule

```
<FaultRule name=OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientResponse</Name>
        <Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition>
    </Step>
    <Step>
        <Name>AM-InvalidTokenResponse</Name>
        <Condition>(fault.name = "invalid_access_token")</Condition>
    </Step>
    <Condition>(oauthV2.failed = true) </Condition>
</FaultRule>
```

<br />

## GetOAuthV2Info policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes. The error names shown below are the strings
that are assigned to the `fault.name` variable when an error occurs. See the Fault
variables section below for more details.

| Fault code | HTTP status | Cause |
|---|---|---|
| `steps.oauth.v2.access_token_expired` | 500 | The access token sent to the policy is expired. |
| `steps.oauth.v2.authorization_code_expired` | 500 | The authorization code sent to the policy is expired. |
| `steps.oauth.v2.invalid_access_token` | 500 | The access token sent to the policy is invalid. |
| `steps.oauth.v2.invalid_client-invalid_client_id` | 500 | The client ID sent to the policy is invalid. |
| `steps.oauth.v2.invalid_refresh_token` | 500 | The refresh token sent to the policy is invalid. |
| `steps.oauth.v2.invalid_request-authorization_code_invalid` | 500 | The authorization code sent to the policy is invalid. |
| `steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound` | 401 | Please see [this Apigee Community post](https://discuss.google.dev/t/oauth2-0-access-token-verification-throws-invalid-api-call-as-no-apiproduct-match-found-error/17064) for information about troubleshooting this error. |
| `steps.oauth.v2.refresh_token_expired` | 500 | The refresh token sent to the policy is expired. |

### Deployment errors

Refer to the message reported in the UI for information about deployment errors.

### Fault variables

These variables are set when this policy triggers an error at runtime.

> [!NOTE]
> **Note:** You an use these variables to create Fault Rule conditions. For more information, see [What you need to know
> about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "IPDeniedAccess"` |
| `oauthV2.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.GetTokenInfo.failed = true` |
| `oauthV2.policy_name.fault.name` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id` |
| `oauthV2.policy_name.fault.cause` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.GetTokenInfo.cause = ClientID is Invalid` |

### Example error response

```
{  
   "fault":{  
      "faultstring":"ClientId is Invalid",
      "detail":{  
         "errorcode":"keymanagement.service.invalid_client-invalid_client_id"
      }
   }
}
```

### Example fault rule

```
<FaultRule name="OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientIdResponse</Name>
    </Step>
    <Condition>(fault.name = "invalid_client-invalid_client_id")</Condition>
</FaultRule>
```

<br />

## SetOAuthV2Info policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause |
|---|---|---|
| `steps.oauth.v2.access_token_expired` | 500 | The access token sent to the policy is expired. |
| `steps.oauth.v2.invalid_access_token` | 500 | The access token sent to the policy is invalid. |
| `steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound` | 401 | Please see [this Apigee Community post](https://discuss.google.dev/t/oauth2-0-access-token-verification-throws-invalid-api-call-as-no-apiproduct-match-found-error/17064) for information about troubleshooting this error. |

### Deployment errors

Refer to the message reported in the UI for information about deployment errors.

### Fault variables

These variables are set when this policy triggers an error at runtime.

> [!NOTE]
> **Note:** You an use these variables to create Fault Rule conditions. For more information, see [What you need to know
> about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name = "invalid_access_token"` |
| `oauthV2.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.SetTokenInfo.failed = true` |
| `oauthV2.policy_name.fault.name` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.SetTokenInfo.fault.name = invalid_access_token` |
| `oauthv2.policy_name.fault.cause` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.SetTokenInfo.cause = Invalid Access Token` |

### Example error response

```
{
  "fault": {
    "faultstring": "Invalid Access Token",
    "detail": {
      "errorcode": "keymanagement.service.invalid_access_token"
    }
  }
}
```

### Example fault rule

```
<FaultRule name=SetOAuthV2Info Faults">
    <Step>
        <Name>AM-InvalidTokenResponse</Name>
        <Condition>(fault.name = "invalid_access_token")</Condition>
    </Step>
    <Condition>(oauthV2.failed = true) </Condition>
</FaultRule>
```

<br />

## DeleteOAuthV2Info policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause |
|---|---|---|
| `steps.oauth.v2.invalid_access_token` | 401 | The access token sent to the policy is invalid. |
| `steps.oauth.v2.invalid_request-authorization_code_invalid` | 401 | The authorization code sent to the policy is invalid. |
| `steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound` | 401 | Please see [this Apigee Community post](https://discuss.google.dev/t/oauth2-0-access-token-verification-throws-invalid-api-call-as-no-apiproduct-match-found-error/17064) for information about troubleshooting this error. |

### Deployment errors

Refer to the message reported in the UI for information about deployment errors.

### Fault variables

These variables are set when this policy triggers an error at runtime.

> [!NOTE]
> **Note:** You an use these variables to create Fault Rule conditions. For more information, see [What you need to know
> about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name = "invalid_access_token"` |
| `oauthV2.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.DeleteTokenInfo.failed = true` |
| `oauthV2.policy_name.fault.name` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.DeleteTokenInfo.fault.name = invalid_access_token` |
| `oauthv2.policy_name.fault.cause` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.DeleteTokenInfo.cause = Invalid Access Token` |

### Example error response

```
{
  "fault": {
    "faultstring": "Invalid Access Token",
    "detail": {
      "errorcode": "keymanagement.service.invalid_access_token"
    }
  }
}
```

### Example fault rule

```
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="DeleteOAuthV2Info_Faults">
    <Step>
        <Name>AM-InvalidTokenResponse</Name>
    </Step>
    <Condition>(fault.name = "invalid_access_token")</Condition>
</FaultRule>
```

<br />

## OAuthv1.0a policy


The OAuthV1 Policy type defines the following error codes.

For OAuth-related HTTP error codes, see [OAuth HTTP error
response reference](https://docs.apigee.com/api-platform/reference/policies/oauth-http-status-code-reference).

| Error Code | Message |
|---|---|
|   |
| `AppKeyNotResolved` | `Could not resolve the app key with variable {0}` |
| `ConsumerKeyNotResolved` | `Could not resolve the consumer key with variable {0}` |
| `RequestTokenNotResolved` | `Could not resolve the request token with the variable {0}` |
| `AccessTokenNotResolved` | `Could not resolve the access token with the variable {0}` |
| `ResponseGenerationError` | `Error while generating response : {0}` |
| `UnableToDetermineOperation` | `Unable to determine an operation for stepDefinition {0}` |
| `UnableToResolveOAuthConfig` | `Unable to resolve the OAuth configuration for {0}` |
| `AtLeastOneParamRequired` | `At least one of AccessToken, RequestToken or ConsumerKey must be specified in stepDefinition {0}` |
| `SpecifyValueOrRefReqToken` | `Specify Request Token as value or ref in stepDefinition {0}` |
| `SpecifyValueOrRefAccToken` | `Specify Access Token as value or ref in stepDefinition {0}` |
| `SpecifyValueOrRefConKey` | `Specify Consumer Key as value or ref in stepDefinition {0}` |
| `SpecifyValueOrRefAppKey` | `Specify App Key as value or ref in stepDefinition {0}` |
| `ExpiresInNotApplicableForOperation` | `ExpiresIn element is not valid for operation {0}` |
| `InvalidValueForExpiresIn` | `Invalid value for ExpiresIn element for operation {0}` |
| `FailedToFetchApiProduct` | `Failed to fetch api product for key {0}` |
| `InvalidTokenType` | `Valid token types : {0}, Invalid toke type {1} in stepDefinition {2}` |
| `TokenValueRequired` | `Token value is required in stepDefinition {0}` |
| `FailedToResolveRealm` | `Failed to resolve realm {0}` |

<br />

## GetOAuthV1Info policy


No error codes are specified for the Get OAuth v1.0a Info policy.

<br />

## DeleteOAuthV1Info policy


On success, the policy returns a 200 status.

On failure, the policy returns 404 and output similar to the following (depending on whether
you are deleting an access token, request token, or verifier.):

```
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 144
Connection: keep-alive

{"fault":{"faultstring":"Invalid Access Token","detail":{"errorcode":"keymanagement.service.invalid_request-access_token_invalid"}}}
```

<br />

## PythonScript policy


This section describes the fault codes and error messages that are returned and fault variables
that are set by Edge when this policy triggers an error. This information is important to know
if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.script.ScriptEvaluationFailed` | 500 | The PythonScript policy can throw several different types of ScriptExecutionFailed errors. Commonly seen types of errors include [NameError](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/python-script-runtime-errors#nameerror) and [ZeroDivisionError](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/python-script-runtime-errors#zerodivisionerror). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/python-script-runtime-errors#scriptevaluationfailed) |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click next to the error's cause description to visit the troubleshooting page.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidResourceUrlFormat` | If the format of the resource URL specified within the `<ResourceURL>` or the `<IncludeURL>` element of the PythonScript policy is invalid, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/python-script-deployment-errors#invalidresourceurlformat) |
| `InvalidResourceUrlReference` | If the `<ResourceURL>` or the `<IncludeURL>` elements refer to a PythonScript file that does not exist, then the deployment of the API proxy fails. The referenced source file must exist either the API proxy, environment, or organization level. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/python-script-deployment-errors#invalidresourceurlreference) |

### Fault variables

These variables are set when this policy triggers an error at runtime. For more information,
see [What you
need to know about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "ScriptExecutionFailed"` |
| `pythonscript.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `pythonscript.PythonScript-1.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```python
{
  "fault": {
    "faultstring": "Execution of SetResponse failed with error: Pythonscript runtime error: "ReferenceError: "status" is not defined.\"",
    "detail": {
      "errorcode": "steps.script.ScriptExecutionFailed"
    }
  }
}
```

### Example fault rule

```python
<FaultRule name="PythonScript Policy Faults">
    <Step>
        <Name>AM-CustomErrorResponse</Name>
        <Condition>(fault.name Matches "ScriptExecutionFailed") </Condition>
    </Step>
    <Condition>(pythonscript.PythonScript-1.failed = true) </Condition>
</FaultRule>
```

<br />

## Quota policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `policies.ratelimit.FailedToResolveQuotaIntervalReference` | 500 | Occurs if the `<Interval>` element is not defined within the Quota policy. This element is mandatory and used to specify the interval of time applicable to the quota. The time interval can be minutes, hours, days, weeks, or months as defined with the `<TimeUnit>` element. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/quota-runtime-errors#failedtoresolvequotaintervalreference) |
| `policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference` | 500 | Occurs if the `<TimeUnit>` element is not defined within the Quota policy. This element is mandatory and used to specify the unit of time applicable to the quota. The time interval can be in minutes, hours, days, weeks, or months. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/quota-runtime-errors#failedtoresolvequotaintervaltimeunitreference) |
| `policies.ratelimit.InvalidMessageWeight` | 500 | Occurs if the value of the `<MessageWeight>` element specified through a flow variable is invalid (a non-integer value). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/quota-runtime-errors#invalidmessageweight) |
| `policies.ratelimit.QuotaViolation` | 500 | The quota limit was exceeded. | N/A |

### Deployment errors

> [!IMPORTANT]
> Need help resolving an error?Click in the Fix column for detailed troubleshooting information.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidQuotaInterval` | If the quota interval specified in the `<Interval>` element is not an integer, then the deployment of the API proxy fails. For example, if the quota interval specified is 0.1 in the `<Interval>` element, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/quota-deployment-errors#invalidquotainterval) |
| `InvalidQuotaTimeUnit` | If the time unit specified in the `<TimeUnit>` element is unsupported, then the deployment of the API proxy fails. The supported time units are `minute`, `hour`, `day`, `week`, and `month`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/quota-deployment-errors#invalidquotatimeunit) |
| `InvalidQuotaType` | If the type of the quota specified by the `type` attribute in the `<Quota>` element is invalid, then the deployment of the API proxy fails. The supported quota types are `default`, `calendar`, `flexi`, and `rollingwindow`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/quota-deployment-errors#invalidquotatype) |
| `InvalidStartTime` | If the format of the time specified in the `<StartTime>` element is invalid, then the deployment of the API proxy fails. The valid format is `yyyy-MM-dd HH:mm:ss`, which is the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date and time format. For example, if the time specified in the `<StartTime>` element is `7-16-2017 12:00:00` then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/quota-deployment-errors#invalidstarttime) |
| `StartTimeNotSupported` | If the `<StartTime>` element is specified whose quota type is not `calendar` type, then the deployment of the API proxy fails. The `<StartTime>` element is supported only for the `calendar` quota type. For example, if the `type` attribute is set to `flexi` or `rolling window` in the `<Quota>` element, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/quota-deployment-errors#starttimenotsupported) |
| `InvalidTimeUnitForDistributedQuota` | If the `<Distributed>` element is set to `true` and the `<TimeUnit>` element is set to `second` then the deployment of the API proxy fails. The timeunit `second` is invalid for a distributed quota. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/quota-deployment-errors#invalidtimeunitfordistributedquota) |
| `InvalidSynchronizeIntervalForAsyncConfiguration` | If the value specified for the `<SyncIntervalInSeconds>` element within the `<AsynchronousConfiguration>` element in a Quota policy is less than zero, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/quota-deployment-errors#invalidsynchronizeintervalforasyncconfiguration) |
| `InvalidAsynchronizeConfigurationForSynchronousQuota` | If the value of the `<AsynchronousConfiguration>` element is set to `true` in a Quota policy, which also has asynchronous configuration defined using the `<AsynchronousConfiguration>` element, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/quota-deployment-errors#invalidasynchronizeconfigurationforsynchronousquota) |

### Fault variables

These variables are set when this policy triggers an error. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "QuotaViolation"` |
| `ratelimit.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `ratelimit.QT-QuotaPolicy.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{  
   "fault":{  
      "detail":{  
         "errorcode":"policies.ratelimit.QuotaViolation"
      },
      "faultstring":"Rate limit quota violation. Quota limit  exceeded. Identifier : _default"
   }
}
```

### Example fault rule

```
<FaultRules>
    <FaultRule name="Quota Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "QuotaViolation") </Condition>
        </Step>
        <Condition>ratelimit.Quota-1.failed=true</Condition>
    </FaultRule>
</FaultRules>
```

<br />

## ResetQuota policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `policies.resetquota.InvalidRLPolicy` | 500 | The Quota policy specified in the `<Quota>` element of the Reset Quota policy is not defined in the API proxy and thus is not available during the flow. The `<Quota>` element is mandatory and identifies the target Quota policy whose counter should be updated through the Reset Quota policy. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/reset-quota-runtime-errors#invalidrlpolicy) |
| `policies.resetquota.FailedToResolveAllowCountRef` | N/A | The reference to the variable containing the allow count in the `<Allow>` element of the policy cannot be resolved to a value. This element is mandatory and specifies the amount to decrease the quota counter. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/reset-quota-runtime-errors#failedtoresolveallowcountref) |
| `policies.resetquota.FailedToResolveRLPolicy` | 500 | The variable referenced by the `ref` attribute in the `<Quota>` element cannot be resolved. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/reset-quota-runtime-errors#failedtoresolverlpolicy) |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click next to the error's cause description to visit the troubleshooting page.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidCount` | If the count value specified in the `<Allow>` element of the Reset Quota Policy is not an integer, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/reset-quota-deployment-errors) |

<br />

## RaiseFault policy


This section describes the fault codes and error messages that are returned and fault variables
that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see
[What you need to know about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and
[Handling faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause |
|---|---|---|
| `steps.raisefault.RaiseFault` | 500 | See fault string. |

### Deployment errors

None.

### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name = "RaiseFault"` |
| `raisefault.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `raisefault.RF-ThrowError.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{
   "fault":{
      "detail":{
         "errorcode":"steps.raisefault.RaiseFault"
      },
      "faultstring":"Raising fault. Fault name: [name]"
   }
}
```

<br />

## RegularExpressionProtection policy


This section describes the error codes and messages returned and fault variables
set by Edge when this policy triggers an error. This information is important to know if
you are developing fault rules to handle faults. If you want to capture an error and raise your own
custom error, set the `continueOnError="true"` attribute on the policy root element.
To learn more, see [What you need to know about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

Errors returned from Edge policies follow a consistent format as described in the [Error code reference](https://docs.apigee.com/api-platform/reference/policies/error-code-reference).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Error Code | Message |
|---|---|
|   |
| ExecutionFailed | Failed to execute the RegularExpressionProtection StepDefinition {0}. Reason: {1} |
| InstantiationFailed | Failed to instantiate the RegularExpressionProtection StepDefinition {0} |
| NonMessageVariable | Variable {0} does not resolve to a Message |
| SourceMessageNotAvailable | {0} message is not available for RegularExpressionProtection StepDefinition {1} |
| ThreatDetected | Regular Expression Threat Detected in {0}: regex: {1} input: {2} |
| VariableResolutionFailed | Failed to resolve variable {0} |

### Deployment errors

> [!IMPORTANT]
> Need help resolving an error?Click in the Fix column for detailed troubleshooting information.

| Error Code | Message | Fix |
|---|---|---|
|   |
| CannotBeConvertedToNodeset | RegularExpressionProtection {0}: Result of xpath {1} cannot be converted to nodeset. Context {2} | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/regular-expression-protection-deployment-errors#cannotbeconvertedtonodeset) |
| DuplicatePrefix | RegularExpressionProtection {0}: Duplicate prefix {1} | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/regular-expression-protection-deployment-errors#duplicateprefix) |
| EmptyJSONPathExpression | RegularExpressionProtection {0}: Empty JSONPath expression | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/regular-expression-protection-deployment-errors#emptyjsonpathexpression) |
| EmptyXPathExpression | RegularExpressionProtection {0}: Empty XPath expression | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/regular-expression-protection-deployment-errors#emptyxpathexpression) |
| InvalidRegularExpression | RegularExpressionProtection {0}: Invalid Regular Expression {1}, Context {2} | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/regular-expression-protection-deployment-errors#invalidregularexpression) |
| JSONPathCompilationFailed | RegularExpressionProtection {0}: Failed to compile jsonpath {1}. Context {2} | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/regular-expression-protection-deployment-errors#jsonpathcompilationfailed) |
| NONEmptyPrefixMappedToEmptyURI | RegularExpressionProtection {0}: Non-empty prefix {1} cannot be mapped to empty uri | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/regular-expression-protection-deployment-errors#nonemptyprefixmappedtoemptyuri) |
| NoPatternsToEnforce | RegularExpressionProtection {0}: No patterns to enforce in {1} | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/regular-expression-protection-deployment-errors#nopatternstoenforce) |
| NothingToEnforce | RegularExpressionProtection {0}: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/regular-expression-protection-deployment-errors#nothingtoenforce) |
| XPathCompilationFailed | RegularExpressionProtection {0}: Failed to compile xpath {1}. Context {2} | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/regular-expression-protection-deployment-errors#xpathcompilationfailed) |

### Fault variables

These variables are set when this policy triggers an error. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the table above. | `fault.name Matches "ThreatDetected"` |
| `regularexpressionprotection.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `regularexpressionprotection.Regular-Expressions-Protection-1.failed = true` |

<br />

## SOAPMessageValidation policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.messagevalidation.SourceMessageNotAvailable` | 500 | This error occurs if a variable specified in the `<Source>` element of the policy is either: - out of scope (not available in the specific flow where the policy is being executed) or - can't be resolved (is not defined) | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/soap-message-validation-runtime-errors#sourcemessagenotavailable) |
| `steps.messagevalidation.NonMessageVariable` | 500 | This error occurs if the `<Source>` element in the SOAPMessageValidation policy is set to a variable which is not of type [message](https://docs.apigee.com/api-platform/reference/variables-reference#message). Message type variables represent entire HTTP requests and responses. The built-in Edge flow variables `request`, `response`, and `message` are of type message. To learn more about message variables, see the [Variables reference](https://docs.apigee.com/api-platform/reference/variables-reference#message). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/soap-message-validation-runtime-errors#nonmessagevariable) |
| `steps.messagevalidation.Failed` | 500 | This error occurs if the SOAPMessageValidation policy fails to validate the input message payload against the XSD schema or WSDL definition. It will also occur if there is malformed JSON or XML in the payload message. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/soap-message-validation-runtime-errors#failed) |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click next to the error's cause description to visit the troubleshooting page.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidResourceType` | The `<ResourceURL>` element in the SOAPMessageValidation policy is set to a resource type not supported by the policy. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/soap-message-validation-deployment-errors#invalidresourcetype) |
| `ResourceCompileFailed` | The resource script referenced in the `<ResourceURL>` element of the SOAPMessageValidation policy contains an error that prevents it from compiling. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/soap-message-validation-deployment-errors#resourcecompilefailed) |
| `RootElementNameUnspecified` | The `<Element>` element in the SOAPMessageValidation policy does not contain the root element's name. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/soap-message-validation-deployment-errors#rootelementnameunspecified) |
| `InvalidRootElementName` | The `<Element>` element in the SOAPMessageValidation policy contains a root element name that does not adhere to XML rules for valid element naming. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/soap-message-validation-deployment-errors#invalidrootelementname) |

<br />

## SAMLAssertion policy


This section describes the fault codes and error messages that are returned
and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

| Error name | Cause | Fix |
|---|---|---|
| `SourceNotConfigured` | One or more of the following elements of the Validate SAML Assertion policy is not defined or empty: `<Source>`, `<XPath>`, `<Namespaces>`, `<Namespace>`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/samlassertion-deployment-errors#sourcenotconfigured) |
| `TrustStoreNotConfigured` | If the `<TrustStore>` element is empty or not specified in the ValidateSAMLAssertion policy, then the deployment of the API proxy fails. A valid Trust Store is required. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/samlassertion-deployment-errors#truststorenotconfigured) |
| `NullKeyStoreAlias` | If the child element `<Alias>` is empty or not specified in the `<Keystore>` element of Generate SAML Assertion policy, then the deployment of the API proxy fails. A valid Keystore alias is required. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/samlassertion-deployment-errors#nullkeystorealias) |
| `NullKeyStore` | If the child element `<Name>` is empty or not specified in the `<Keystore>` element of GenerateSAMLAssertion policy, then the deployment of the API proxy fails. A valid Keystore name is required. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/samlassertion-deployment-errors#nullkeystore) |
| `NullIssuer` | If the `<Issuer>` element is empty or not specified in the Generate SAML Assertion policy, then the deployment of the API proxy fails. A valid `<Issuer>` value is required. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/samlassertion-deployment-errors#nullissuer) |

### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault. The fault name is the last part of the fault code. | `fault.name = "InvalidMediaTpe"` |
| `GenerateSAMLAssertion.failed` | For a validate SAML assertion policy configuration, the error prefix is `ValidateSAMLAssertion`. | `GenerateSAMLAssertion.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{
  "fault": {
    "faultstring": "GenerateSAMLAssertion[GenSAMLAssert]: Invalid media type",
    "detail": {
      "errorcode": "steps.saml.generate.InvalidMediaTpe"
    }
  }
}
```

### Example fault rule

```
<FaultRules>
    <FaultRule name="invalid_saml_rule">
        <Step>
            <Name>invalid-saml</Name>
        </Step>
        <Condition>(GenerateSAMLAssertion.failed = "true")</Condition>
    </FaultRule>
</FaultRules>
```

<br />

## ServiceCallout policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.servicecallout.ExecutionFailed` | 500 | This error can occur when: - the policy is asked to handle input that is malformed or otherwise invalid. - the backend target service returns an error status (by default, 4xx or 5xx). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/service-callout-runtime-errors#executionfailed) |
| `steps.servicecallout.RequestVariableNotMessageType` | 500 | The Request variable specified in the policy is not of type Message. For example, if it's a string or other non-message type, you'll see this error. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/service-callout-runtime-errors#requestvariablenotmessagetype) |
| `steps.servicecallout.RequestVariableNotRequestMessageType` | 500 | The Request variable specified in the policy is not of type Request Message. For example, if it's a Response type, you'll see this error. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/service-callout-runtime-errors#requestvariablenotrequestmessagetype) |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help fixing an error? Click in the Fix column for detailed troubleshooting information.

| Error name | Cause | Fix |
|---|---|---|
| `URLMissing` | The `<URL>` element inside `<HTTPTargetConnection>` is missing or empty. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/service-callout-deployment-errors#urlmissing) |
| `ConnectionInfoMissing` | This error happens if the policy does not have an `<HTTPTargetConnection>` or `<LocalTargetConnection>` element. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/service-callout-deployment-errors#connectioninfomissing) |
| `InvalidTimeoutValue` | This error happens if the `<Timeout>` value is negative or zero. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/service-callout-deployment-errors#invalidtimeoutvalue) |

### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name = "RequestVariableNotMessageType"` |
| `servicecallout.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `servicecallout.SC-GetUserData.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.servicecallout.RequestVariableNotMessageType"
      },
      "faultstring":"ServiceCallout[ServiceCalloutGetMockResponse]: 
            request variable data_str value is not of type Message"
   }
}
```

### Example fault rule

```
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="RequestVariableNotMessageType">
    <Step>
        <Name>AM-RequestVariableNotMessageType</Name>
    </Step>
    <Condition>(fault.name = "RequestVariableNotMessageType")</Condition>
</FaultRule>
```

<br />

## SpikeArrest policy


This section describes the fault codes and error messages that are returned and fault variables
that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see
[What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `policies.ratelimit.FailedToResolveSpikeArrestRate` | `500` | This error occurs if the reference to the variable containing the rate setting within the [`<Rate>`](https://docs.apigee.com/api-platform/reference/policies/spike-arrest-policy#rate) element cannot be resolved to a value within the Spike Arrest policy. This element is mandatory and used to specify the spike arrest rate in the form of `intpm` or `intps`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/spike-arrest-runtime-errors#failedtoresolvespikearrestrate) |
| `policies.ratelimit.InvalidMessageWeight` | `500` | This error occurs if the value specified for the [`<MessageWeight>`](https://docs.apigee.com/api-platform/reference/policies/spike-arrest-policy#messageweight) element through a flow variable is invalid (a non-integer value). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/spike-arrest-runtime-errors#invalidmessageweight) |
| `policies.ratelimit.SpikeArrestViolation` | `429` | The rate limit was exceeded. > [!NOTE] > **Note:** For Private Cloud, the default HTTP status code returned is `500`. To change the status code returned to `429`, set this property with the API call described in [Example fault rule](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#example-fault-rule) |   |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> **Tip:** Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

| Error name | Cause | Fix |
|---|---|---|
| `InvalidAllowedRate` | If the spike arrest rate specified in the [`<Rate>`](https://docs.apigee.com/api-platform/reference/policies/spike-arrest-policy#rate) element of the Spike Arrest Policy is not an integer or if the rate does not have `ps` or `pm` as a suffix, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/spike-arrest-deployment-errors#invalidallowedrate) |

### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "SpikeArrestViolation"` |
| `ratelimit.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `ratelimit.SA-SpikeArrestPolicy.failed = true` |

### Example error response

Shown below is an example error response:

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{  
   "fault":{  
      "detail":{  
         "errorcode":"policies.ratelimit.SpikeArrestViolation"
      },
      "faultstring":"Spike arrest violation. Allowed rate : 10ps"
   }
}
```

### Example fault rule

Shown below is an example fault rule to handle a `SpikeArrestViolation` fault:

```
<FaultRules>
    <FaultRule name="Spike Arrest Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "SpikeArrestViolation") </Condition>
        </Step>
        <Condition>ratelimit.Spike-Arrest-1.failed=true</Condition>
    </FaultRule>
</FaultRules>
```

<br />

## StatisticsCollector policy


This section describes the error messages and flow variables that are set when this policy
triggers an error. This information is important to know if you are developing fault rules for a
proxy. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

None.

### Deployment errors

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Error name | Cause | Fix |
|---|---|---|
| `UnsupportedDatatype` | If the type of the variable specified by the ref attribute in the `<Statistic>` element of the Statistics Collector policy is unsupported, then the deployment of the API proxy fails. The supported data types are `string`, `integer`, `float`, `long`, `double`, and `boolean`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/stats-collector-deployment-errors#unsupporteddatatype) |
| `InvalidName` | If the name used to reference the data collected for the specified variable defined within the `<Statistic>` element of the Statistics Collector policy conflicts with a system-defined variable, then the deployment of the API proxy fails. Some of the known system-defined variables are `organization` and `environment`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/stats-collector-deployment-errors#invalidname) |
| `DatatypeMissing` | If the type of the variable specified by the `ref` attribute in the `<Statistic>` element of the Statistics Collector policy is missing, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/stats-collector-deployment-errors#datatypemissing) |

### Fault variables

None.

<br />

## VerifyAPIKey policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause |
|---|---|---|
| `keymanagement.service.CompanyStatusNotActive` | 401 | The Company associated with the Developer App that has the API key you are using has an inactive status. When a Company's status is set to inactive, you cannot access the developers or apps associated with that Company. An org admin can change a Company's status using the management API. See [Set the Status of a Company](https://docs.apigee.com/management/apis/put/organizations/{org_name}/companies/{company_name}-0). |
| `keymanagement.service.DeveloperStatusNotActive` | 401 | The developer who created the Developer App that has the API key you are using has an inactive status. When an App Developer's status is set to inactive, any Developer Apps created by that developer are deactivated. An admin user with appropriate permissions (such as Organization Administrator) can change a developer's status in the following ways: - Management API: [Set Developer Status](https://docs.apigee.com/management/apis/post/organizations/{org_name}/developers/{developer_email_or_id}) - Management UI: In [Register app developers](https://docs.apigee.com/api-platform/publish/adding-developers-your-api-product), see the instructions for deactivating (and activating) a developer. |
| `keymanagement.service.invalid_client-app_not_approved` | 401 | The Developer App associated with the API key is revoked. A revoked app cannot access any API products and cannot invoke any API managed by Apigee Edge. An org admin can change the status of a Developer App using the management API. See [Approve or Revoke Developer App](https://docs.apigee.com/management/apis/post/organizations/{org_name}/developers/{developer_email_or_id}/apps/{app_name}). |
| `oauth.v2.FailedToResolveAPIKey` | 401 | The policy expects to find the API key in a variable that is specified in the policy's [\<APIKey\> element](https://docs.apigee.com/api-platform/reference/policies/verify-api-key-policy#apikey). This error arises when the expected variable does not exist (it cannot be resolved). |
| `oauth.v2.InvalidApiKey` | 401 | An API key was received by Edge, but it is invalid. When Edge looks up the key in its database, it must exactly match the on that was sent in the request. If the API worked previously, make sure the key was not regenerated. If the key was regenerated, you will see this error if you try to use the old key. For details, see [Register apps and manage API keys](https://docs.apigee.com/api-platform/publish/creating-apps-surface-your-api). |
| `oauth.v2.InvalidApiKeyForGivenResource` | 401 | An API key was received by Edge, and it is valid; however, it does not match an approved key in the Developer App associated with your API proxy through a Product. |

> [!NOTE]
> **Note:** Currently Edge does not report the `ApiKeyNotApproved` error accurately. Instead, if a key is not approved (its status is set to "revoked" or "pending"), you will get the FailedToResolveAPIKey error instead. For more information and a possible workaround, see [this post on the Apigee Community](https://discuss.google.dev/t/verify-api-key-not-reporting-api-key-not-approved/1705).

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

| Error name | Cause |
|---|---|
| `SpecifyValueOrRefApiKey` | The `<APIKey>` element does not have a value or key specified. |

### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "FailedToResolveAPIKey"` |
| `oauthV2.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `oauthV2.VK-VerifyAPIKey.failed = true` |

### Example error responses

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{
   "fault":{
      "faultstring":"Invalid ApiKey",
      "detail":{
         "errorcode":"oauth.v2.InvalidApiKey"
      }
   }
}
```

```
{
   "fault":{
      "detail":{
         "errorcode":"keymanagement.service.DeveloperStatusNotActive"
      },
      "faultstring":"Developer Status is not Active"
   }
}
```

### Example fault rule

```
<FaultRule name="FailedToResolveAPIKey">
    <Step>
        <Name>AM-FailedToResolveAPIKey</Name>
    </Step>
    <Condition>(fault.name Matches "FailedToResolveAPIKey") </Condition>
</FaultRule>
```

<br />

## VerifyJWS policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Occurs when |
|---|---|---|
| `steps.jws.AlgorithmInTokenNotPresentInConfiguration` | 401 | Occurs when the verification policy has multiple algorithms |
| `steps.jws.AlgorithmMismatch` | 401 | The algorithm specified in the header by the Generate policy did not match the one expected in the Verify policy. The algorithms specified must match. |
| `steps.jws.ContentIsNotDetached` | 401 | `<DetachedContent>` is specified when the JWS does not contain a detached content payload. |
| `steps.jws.FailedToDecode` | 401 | The policy was unable to decode the JWS. The JWS is possibly corrupted. |
| `steps.jws.InsufficientKeyLength` | 401 | For a key less than 32 bytes for the HS256 algorithm |
| `steps.jws.InvalidClaim` | 401 | For a missing claim or claim mismatch, or a missing header or header mismatch. |
| `steps.jws.InvalidCurve` | 401 | The curve specified by the key is not valid for the Elliptic Curve algorithm. |
| `steps.jws.InvalidJsonFormat` | 401 | Invalid JSON found in the JWS header. |
| `steps.jws.InvalidJws` | 401 | This error occurs when the JWS signature verification fails. |
| `steps.jws.InvalidPayload` | 401 | The JWS payload is invalid. |
| `steps.jws.InvalidSignature` | 401 | `<DetachedContent>` is omitted and the JWS has a detached content payload. |
| `steps.jws.KeyIdMissing` | 401 | The Verify policy uses a JWKS as a source for public keys, but the signed JWS does not include a `kid` property in the header. |
| `steps.jws.KeyParsingFailed` | 401 | The public key could not be parsed from the given key information. |
| `steps.jws.MissingPayload` | 401 | The JWS payload is missing. |
| `steps.jws.NoAlgorithmFoundInHeader` | 401 | Occurs when the JWS omits the algorithm header. |
| `steps.jws.NoMatchingPublicKey` | 401 | The Verify policy uses a JWKS as a source for public keys, but the `kid` in the signed JWS is not listed in the JWKS. |
| `steps.jws.UnhandledCriticalHeader` | 401 | A header found by the Verify JWS policy in the `crit` header is not listed in `KnownHeaders`. |
| `steps.jws.UnknownException` | 401 | An unknown exception occurred. |
| `steps.jws.WrongKeyType` | 401 | Wrong type of key specified. For example, if you specify an RSA key for an Elliptic Curve algorithm, or a curve key for an RSA algorithm. |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

| Error name | Occurs when |
|---|---|
| `InvalidAlgorithm` | The only valid values are: RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512, HS256, HS384, HS512. |
| `EmptyElementForKeyConfiguration` `FailedToResolveVariable` `InvalidConfigurationForActionAndAlgorithmFamily` `InvalidConfigurationForVerify` `InvalidEmptyElement` `InvalidFamiliesForAlgorithm` `InvalidKeyConfiguration` `InvalidNameForAdditionalClaim` `InvalidNameForAdditionalHeader` `InvalidPublicKeyId` `InvalidPublicKeyValue` `InvalidSecretInConfig` `InvalidTypeForAdditionalClaim` `InvalidTypeForAdditionalHeader` `InvalidValueForElement` `InvalidValueOfArrayAttribute` `InvalidVariableNameForSecret` `MissingConfigurationElement` `MissingElementForKeyConfiguration` `MissingNameForAdditionalClaim` `MissingNameForAdditionalHeader` | Other possible deployment errors. |

<br />


### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "TokenExpired"` |
| `JWS.failed` | All JWS policies set the same variable in the case of a failure. | `jws.JWS-Policy.failed = true` |

### Example error response

For error handling, the best practice is to trap the `errorcode` part of the error
response. Do not rely on the text in the `faultstring`, because it could change.

### Example fault rule

```
<FaultRules>
    <FaultRule name="JWS Policy Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "TokenExpired")</Condition>
        </Step>
        <Condition>JWS.failed=true</Condition>
    </FaultRule>
</FaultRules>
```

<br />

## VerifyJWT policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Occurs when |
|---|---|---|
| `steps.jwt.AlgorithmInTokenNotPresentInConfiguration` | 401 | Occurs when the verification policy has multiple algorithms. |
| `steps.jwt.AlgorithmMismatch` | 401 | The algorithm specified in the Generate policy did not match the one expected in the Verify policy. The algorithms specified must match. |
| `steps.jwt.FailedToDecode` | 401 | The policy was unable to decode the JWT. The JWT is possibly corrupted. |
| `steps.jwt.GenerationFailed` | 401 | The policy was unable to generate the JWT. |
| `steps.jwt.InsufficientKeyLength` | 401 | For a key less than 32 bytes for the HS256 algorithm, less than 48 bytes for the HS386 algortithm, and less than 64 bytes for the HS512 algorithm. |
| `steps.jwt.InvalidClaim` | 401 | For a missing claim or claim mismatch, or a missing header or header mismatch. |
| `steps.jwt.InvalidCurve` | 401 | The curve specified by the key is not valid for the Elliptic Curve algorithm. |
| `steps.jwt.InvalidJsonFormat` | 401 | Invalid JSON found in the header or payload. |
| `steps.jwt.InvalidToken` | 401 | This error occurs when the JWT signature verification fails. |
| `steps.jwt.JwtAudienceMismatch` | 401 | The audience claim failed on token verification. |
| `steps.jwt.JwtIssuerMismatch` | 401 | The issuer claim failed on token verification. |
| `steps.jwt.JwtSubjectMismatch` | 401 | The subject claim failed on token verification. |
| `steps.jwt.KeyIdMissing` | 401 | The Verify policy uses a JWKS as a source for public keys, but the signed JWT does not include a `kid` property in the header. |
| `steps.jwt.KeyParsingFailed` | 401 | The public key could not be parsed from the given key information. |
| `steps.jwt.NoAlgorithmFoundInHeader` | 401 | Occurs when the JWT contains no algorithm header. |
| `steps.jwt.NoMatchingPublicKey` | 401 | The Verify policy uses a JWKS as a source for public keys, but the `kid` in the signed JWT is not listed in the JWKS. |
| `steps.jwt.SigningFailed` | 401 | In GenerateJWT, for a key less than the minimum size for the HS384 or HS512 algorithms |
| `steps.jwt.TokenExpired` | 401 | The policy attempts to verify an expired token. |
| `steps.jwt.TokenNotYetValid` | 401 | The token is not yet valid. |
| `steps.jwt.UnhandledCriticalHeader` | 401 | A header found by the Verify JWT policy in the `crit` header is not listed in `KnownHeaders`. |
| `steps.jwt.UnknownException` | 401 | An unknown exception occurred. |
| `steps.jwt.WrongKeyType` | 401 | Wrong type of key specified. For example, if you specify an RSA key for an Elliptic Curve algorithm, or a curve key for an RSA algorithm. |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

| Error name | Cause | Fix |
|---|---|---|
| **`InvalidNameForAdditionalClaim`** | The deployment will fail if the claim used in the child element `<Claim>` of the `<AdditionalClaims>` element is one of the following registered names: `kid`, `iss`, `sub`, `aud`, `iat`, `exp`, `nbf`, or `jti`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#invalidnameforadditionalclaim) |
| **`InvalidTypeForAdditionalClaim`** | If the claim used in the child element `<Claim>` of the `<AdditionalClaims>` element is not of type `string`, `number`, `boolean`, or `map`, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#invalidtypeforadditionalclaim) |
| **`MissingNameForAdditionalClaim`** | If the name of the claim is not specified in the child element `<Claim>` of the `<AdditionalClaims>` element, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#missingnameforadditionalclaim) |
| **`InvalidNameForAdditionalHeader`** | This error ccurs when the name of the claim used in the child element `<Claim>` of the `<AdditionalClaims>` element is either `alg` or `typ`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#invalidnameforadditionalheader) |
| **`InvalidTypeForAdditionalHeader`** | If the type of claim used in the child element `<Claim>` of the `<AdditionalClaims>` element is not of type `string`, `number`, `boolean`, or `map`, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#invalidtypeforadditionalheader) |
| **`InvalidValueOfArrayAttribute`** | This error occurs when the value of the array attribute in the child element `<Claim>` of the `<AdditionalClaims>` element is not set to `true` or `false`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#invalidvalueofarrayattribute) |
| **`InvalidValueForElement`** | If the value specified in the `<Algorithm>` element is not a supported value, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#invalidvalueforelement) |
| **`MissingConfigurationElement`** | This error will occur if the `<PrivateKey>` element is not used with RSA family algorithms or the `<SecretKey>` element is not used with HS Family algorithms. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#missingconfigurationelement) |
| **`InvalidKeyConfiguration`** | If the child element `<Value>` is not defined in the `<PrivateKey>` or `<SecretKey>` elements, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#invalidkeyconfiguration) |
| **`EmptyElementForKeyConfiguration`** | If the ref attribute of the child element `<Value>` of the `<PrivateKey>` or `<SecretKey>` elements is empty or unspecified, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#emptyelementforkeyconfiguration) |
| **`InvalidConfigurationForVerify`** | This error occurs if the `<Id>` element is defined within the `<SecretKey>` element. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#invalidconfigurationforverify) |
| **`InvalidEmptyElement`** | This error occurs if the `<Source>` element of the Verify JWT policy is empty. If present, it must be defined with an Edge flow variable name. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#invalidemptyelement) |
| **`InvalidPublicKeyValue`** | If the value used in the child element `<JWKS>` of the `<PublicKey>` element does not use a valid format as specified in [RFC 7517](https://tools.ietf.org/html/rfc7517), the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#invalidpublickeyvalue) |
| **`InvalidConfigurationForActionAndAlgorithm`** | If the `<PrivateKey>` element is used with HS Family algorithms or the `<SecretKey>` element is used with RSA Family algorithms, the deployment will fail. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/verify-JWT-deployment-errors#invalidconfigurationforactionandalgorithm) |

<br />


### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "TokenExpired"` |
| `JWT.failed` | All JWT policies set the same variable in the case of a failure. | `JWT.failed = true` |

### Example error response

JWT Policy Fault Codes

For error handling, the best practice is to trap the `errorcode` part of the error
response. Do not rely on the text in the `faultstring`, because it could change.

### Example fault rule

```
    <FaultRules>
        <FaultRule name="JWT Policy Errors">
            <Step>
                <Name>JavaScript-1</Name>
                <Condition>(fault.name Matches "TokenExpired")</Condition>
            </Step>
            <Condition>JWT.failed=true</Condition>
        </FaultRule>
    </FaultRules>
    
```

<br />

## XMLThreatProtection policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.xmlthreatprotection.ExecutionFailed` | 500 | The XMLThreatProtection policy can throw many different types of ExecutionFailed errors. Most of these errors occur when a specific threshold set in the policy is exceeded. These types of errors include: [element name length](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmlthreatprotection-runtime-errors#elementnameexceeded), [child count](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmlthreatprotection-runtime-errors#childcountexceeded), [node depth](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmlthreatprotection-runtime-errors#nodedepthexceeded), [attribute count](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmlthreatprotection-runtime-errors#attributecountexceeded), [attribute name length](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmlthreatprotection-runtime-errors#attributenameexceeded), and many others. You can see the complete list in the [XMLThreatProtection policy runtime error troubleshooting](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmlthreatprotection-runtime-errors) topic. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmlthreatprotection-runtime-errors#executionfailed) |
| `steps.xmlthreatprotection.InvalidXMLPayload` | 500 | This error occurs if the input message payload specified by the XMLThreatProtection policy's `<Source>` element is not a valid XML Document. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmlthreatprotection-runtime-errors#invalidxmlpayload) |
| `steps.xmlthreatprotection.SourceUnavailable` | 500 | This error occurs if the [message](https://docs.apigee.com/api-platform/reference/variables-reference#message) variable specified in the `<Source>` element is either: - Out of scope (not available in the specific flow where the policy is being executed) - Is not one of the valid values `request`, `response`, or `message` | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmlthreatprotection-runtime-errors#sourceunavailable) |
| `steps.xmlthreatprotection.NonMessageVariable` | 500 | This error occurs if the `<Source>` element is set to a variable which is not of type [message](https://docs.apigee.com/api-platform/reference/variables-reference#message). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmlthreatprotection-runtime-errors#nonmessagevariable) |

**Notes:**

- The error name ExecutionFailed is the default error name and will be returned regardless of the type of error detected; however, this default can be changed by setting an organization-level property. When this property is set, the error name will reflect the actual error. For example, "TextExceeded" or "AttrValueExceeded". See [Usage Notes](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#usagenotes) for details.
- The 500 HTTP status is the default; however, the HTTP Status can be changed to 400 for request flow faults by setting an organization-level property. See [Usage Notes](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#usagenotes) for details.

### Deployment errors

None.

### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name Matches "SourceUnavailable"` |
| `xmlattack.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `xmlattack.XPT-SecureRequest.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{
  "fault": {
    "faultstring": "XMLThreatProtection[XPT-SecureRequest]: Execution failed. reason: XMLThreatProtection[XTP-SecureRequest]: Exceeded object entry name length at line 2",
    "detail": {
      "errorcode": "steps.xmlthreatprotection.ExecutionFailed"
    }
  }
}
```

### Example fault rule

```
<FaultRule name="XML Threat Protection Policy Faults">
    <Step>
        <Name>AM-CustomErrorResponse</Name>
        <Condition>(fault.name Matches "ExecutionFailed") </Condition>
    </Step>
    <Condition>(xmlattack.XPT-SecureRequest.failed = true) </Condition>
</FaultRule>
```

<br />

## XMLtoJSON policy


This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error.
This information is important to know if you are developing fault rules to
handle faults. To learn more, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors) and [Handling
faults](https://docs.apigee.com/api-platform/fundamentals/fault-handling).

### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.xmltojson.ExecutionFailed` | 500 | This error occurs when the input payload (XML) is empty or the input XML is invalid or malformed. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmltojson-runtime-errors#executionfailed) |
| `steps.xmltojson.InCompatibleType` | 500 | This error occurs if the type of the variable defined in the `<Source>` element and the `<OutputVariable>` element are not the same. It is mandatory that the type of the variables contained within the `<Source>` element and the `<OutputVariable>` element matches. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmltojson-runtime-errors#incompatibletypes) |
| `steps.xmltojson.InvalidSourceType` | 500 | This error occurs if the type of the variable used to define the `<Source>` element is invalid.The valid types of variable are message and string. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmltojson-runtime-errors#invalidsourcetype) |
| `steps.xmltojson.OutputVariableIsNotAvailable` | 500 | This error occurs if the variable specified in the `<Source>` element of the XML to JSON policy is of type string and the `<OutputVariable>` element is not defined. The `<OutputVariable>` element is mandatory when the variable defined in the `<Source>` element is of type string. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmltojson-runtime-errors#outputvariableisnotavailable) |
| `steps.xmltojson.SourceUnavailable` | 500 | This error occurs if the [message](https://docs.apigee.com/api-platform/reference/variables-reference#messagevariables) variable specified in the `<Source>` element of the XML to JSON policy is either: - out of scope (not available in the specific flow where the policy is being executed) or - can't be resolved (is not defined) | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xmltojson-runtime-errors#sourceunavailable) |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click in the Fix column for detailed troubleshooting information.

| Error name | Cause | Fix |
|---|---|---|
| `EitherOptionOrFormat` | If one of the elements `<Options>` or `<Format>` is not declared in the XML to JSON Policy, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/xmltojson-deployment-errors#eitheroptionorformat) |
| `UnknownFormat` | If the `<Format>` element within the XML to JSON policy has an unknown format defined, then the deployment of the API proxy fails. Predefined formats include: `xml.com`, `yahoo`, `google`, and `badgerFish`. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/xmltojson-deployment-errors#unknownformat) |

### Fault variables

These variables are set when a runtime error occurs. For more information, see [What you need to know
about policy errors](https://docs.apigee.com/api-platform/fundamentals/what-you-need-know-about-policy-errors).

| Variables | Where | Example |
|---|---|---|
| `fault.name="fault_name"` | <var translate="no">fault_name</var> is the name of the fault, as listed in the [Runtime errors](https://docs.apigee.com/api-platform/reference/policies/error-code-reference#runtime-errors) table above. The fault name is the last part of the fault code. | `fault.name = "SourceUnavailable"` |
| `xmltojson.policy_name.failed` | <var translate="no">policy_name</var> is the user-specified name of the policy that threw the fault. | `xmltojson.XMLtoJSON-1.failed = true` |

### Example error response

> [!NOTE]
> **Note:** For error handling, the best practice is to trap the `errorcode` part of the error response. Do not rely on the text in the `faultstring`, because it could change.

```
{
  "fault": {
    "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available",
    "detail": {
      "errorcode": "steps.xml2json.SourceUnavailable"
    }
  }
}
```

### Example fault rule

```
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="XML to JSON Faults">
    <Step>
        <Name>AM-SourceUnavailableMessage</Name>
        <Condition>(fault.name Matches "SourceUnavailable") </Condition>
    </Step>
    <Step>
        <Name>AM-BadXML</Name>
        <Condition>(fault.name = "ExecutionFailed")</Condition>
    </Step>
    <Condition>(xmltojson.XMLtoJSON-1.failed = true) </Condition>
</FaultRule>
```

<br />

## XSLTransform policy


### Runtime errors

These errors can occur when the policy executes.

> [!IMPORTANT]
> **Tip:** Use [API Monitoring](https://docs.apigee.com/api-monitoring) to investigate fault codes and diagnose issues faster. See [Set up a policy fault code alert](https://docs.apigee.com/api-monitoring/alerts-notifications#fault-code-alert) for an example. See [Fault code reference](https://docs.apigee.com/api-monitoring/fault-codes) for a complete list of all fault codes that you can handle with API Monitoring.

| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
| `steps.xsl.XSLSourceMessageNotAvailable` | 500 | This error occurs if the message or string variable specified in the `<Source>` element of the XSL Transform policy is either out of scope (not available in the specific flow where the policy is being executed) or can't be resolved (is not defined). | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xsl-transform-runtime-errors#xslsourcemessagenotavailable) |
| `steps.xsl.XSLEvaluationFailed` | 500 | This error occurs if the input XML payload is unavailable/malformed or the XSLTransform policy fails/is unable to transform the input XML file based on the transformation rules provided in the XSL file. There could be many different causes for the XSLTransform policy to fail. The reason for failure in the error message will provide more information on the cause. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/runtime/xsl-transform-runtime-errors#xslevaluationfailed) |

### Deployment errors

These errors can occur when you deploy a proxy containing this policy.

> [!IMPORTANT]
> Need help resolving an error? Click next to the error's cause description to visit the troubleshooting page.

| Error name | Cause | Fix |
|---|---|---|
| `XSLEmptyResourceUrl` | If the `<ResourceURL>` element in the XSL Transform policy is empty, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/xsl-transform-deployment-errors#xslemptyresourceurl) |
| `XSLInvalidResourceType` | If the resource type specified in the `<ResourceURL>` element of the XSL Transform policy is not of type `xsl`, then the deployment of the API proxy fails. | [](https://docs.apigee.com/api-platform/troubleshoot/policies/deployment/xsl-transform-deployment-errors#xslinvalidresourcetype) |

<br />