---
title: Metadata annotation
description: The annotation specifies the outcome provider and config class, and optional config validator class.
component: pingam
version: 7.2
page_id: pingam:auth-nodes:core-metadata
canonical_url: https://docs.pingidentity.com/pingam/8.1/auth-nodes/core-metadata.html
llms_txt: https://docs.pingidentity.com/pingam/llms.txt
docs_for_agents: https://developer.pingidentity.com/build-with-ai/docs-for-agents.md
superseded_by: https://docs.pingidentity.com/pingam/8.1/auth-nodes/core-metadata.html
---

# Metadata annotation

The *annotation* specifies the outcome provider and config class, and optional config validator class.

* `outcomeProvider`

  The class name that the node uses to set up the possible outcomes.

  The `SingleOutcomeNode` and `AbstractDecisionNode` base classes provide suitable outcome provider classes for those node types. You can create a custom outcome provider for other circumstances.

  For example, the following is the custom outcome provider from the *LDAP Decision* node, which has `True`, `False`, `Locked`, `Cancelled`, and `Expired` exit paths:

  ```java
  /**
  * Defines the possible outcomes from this Ldap node.
  */
  public static class LdapOutcomeProvider implements OutcomeProvider {
    @Override
    public List<Outcome> getOutcomes(PreferredLocales locales, JsonValue nodeAttributes) {
      ResourceBundle bundle = locales.getBundleInPreferredLocale(LdapDecisionNode.BUNDLE,
      LdapOutcomeProvider.class.getClassLoader());
      return ImmutableList.of(
        new Outcome(LdapOutcome.TRUE.name(), bundle.getString("trueOutcome")),
        new Outcome(LdapOutcome.FALSE.name(), bundle.getString("falseOutcome")),
        new Outcome(LdapOutcome.LOCKED.name(), bundle.getString("lockedOutcome")),
        new Outcome(LdapOutcome.CANCELLED.name(), bundle.getString("cancelledOutcome")),
        new Outcome(LdapOutcome.EXPIRED.name(), bundle.getString("expiredOutcome")));
    }
  }
  ```

* `configClass`

  The class name that contains the configuration of any attributes requested by the node when using it as part of a tree.

  For more information, See [Config interface](core-config.html).

* `configValidator`

  An optional class name used to validate the provided configuration.

* `tags`

  An optional list of tags which help to categorize the node when using the tree designer view.

  Tags are made up of one or more text strings that let users find the node more easily when designing trees. For example, you could include common pseudonyms for the functionality the node provides, such as `mfa` for a node that provides multi-factor authentication functionality.

  The tree designer view organizes nodes into a number of categories, based on the presence of certain tag values, as described in the table below:

  **Authentication Node Tag Categories**

  | Icon                                   | Category             | Tag                      | Example Nodes                                                                                                                                                                                                                                                                                                                                                                                                        |
  | -------------------------------------- | -------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | [icon: user, set=fa, size=2x]          | Basic Authentication | `"basic authentication"` | [Data Store Decision node](../authentication-guide/auth-node-configuration-hints.html#auth-node-data-store-decision) [Username Collector node](../authentication-guide/auth-node-configuration-hints.html#auth-node-username-collector)                                                                                                                                                                              |
  | [icon: desktop, set=fa, size=2x]       | MFA                  | `"mfa"`                  | [Push Sender node](../authentication-guide/auth-node-configuration-hints.html#auth-node-push-sender) [WebAuthn Authentication node](../authentication-guide/auth-node-configuration-hints.html#auth-node-webauthn-auth)                                                                                                                                                                                              |
  | [icon: balance-scale, set=fa, size=2x] | Risk                 | `"risk"`                 | [Account Lockout node](../authentication-guide/auth-node-configuration-hints.html#auth-node-account-lockout) [reCAPTCHA Enterprise node](../authentication-guide/auth-node-configuration-hints.html#auth-node-recaptcha-enterprise)                                                                                                                                                                                  |
  | [icon: puzzle-piece, set=fa, size=2x]  | Behavioral           | `"behavioral"`           | N/A                                                                                                                                                                                                                                                                                                                                                                                                                  |
  | [icon: bullseye, set=fa, size=2x]      | Contextual           | `"contextual"`           | [Cookie Presence Decision node](../authentication-guide/auth-node-configuration-hints.html#auth-node-cookie-presence-decision) [Set Persistent Cookie node](../authentication-guide/auth-node-configuration-hints.html#auth-node-set-persistent-cookie)                                                                                                                                                              |
  | [icon: building, set=fa, size=2x]      | Federation           | `"federation"`           | [OAuth 2.0 node](../authentication-guide/auth-node-configuration-hints.html#auth-node-oauth2) [OpenID Connect node](../authentication-guide/auth-node-configuration-hints.html#auth-node-oidc) [Social Facebook node](../authentication-guide/auth-node-configuration-hints.html#auth-node-social-facebook) [Social Google node](../authentication-guide/auth-node-configuration-hints.html#auth-node-social-google) |
  | [icon: id-card, set=fa, size=2x]       | Identity Management  | `"identity management"`  | [Anonymous User Mapping node](../authentication-guide/auth-node-configuration-hints.html#auth-node-anonymous-user-mapping)                                                                                                                                                                                                                                                                                           |
  | [icon: plug, set=fa, size=2x]          | Utilities            | `"utilities"`            | [Choice Collector node](../authentication-guide/auth-node-configuration-hints.html#auth-node-choice-collector) [Polling Wait node](../authentication-guide/auth-node-configuration-hints.html#auth-node-polling-wait) [Scripted Decision node](../authentication-guide/auth-node-configuration-hints.html#auth-node-scripted-decision)                                                                               |

  |   |                                                                                                                        |
  | - | ---------------------------------------------------------------------------------------------------------------------- |
  |   | Nodes which are not tagged with one of the previous tags appear in an **[icon: square, set=fa]Uncategorized** section. |

For example, the following is the `@Node.Metadata` annotation from the [Set Session Properties node](../authentication-guide/auth-node-configuration-hints.html#auth-node-set-session-properties):

```java
@Node.Metadata(outcomeProvider = AbstractSocialAuthLoginNode.SocialAuthOutcomeProvider.class,
    configClass = SocialFacebookNode.FacebookOAuth2Config.class,
    tags = {"social", "federation"})
```

For more information on the `@Node.Metadata` annotation, see the [Node.Metadata](../_attachments/apidocs/org/forgerock/openam/auth/node/api/Node.Metadata.html) annotation type in the *AM Public API Javadoc*.
