> ## Documentation Index
> Fetch the complete documentation index at: https://docs.polymorfa.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Evaluate features

> Returns registered feature decisions for the authenticated organization and requested surface. Unknown, retired, and unauthorized features are omitted. Decisions do not grant permission to perform an action. Organization and project credentials can read decisions; client tokens cannot. Machine credentials receive control variants and no exposure token. Responses must not be cached.



## OpenAPI

````yaml api-reference/features/operate.json POST /messaging/features/evaluate
openapi: 3.0.3
info:
  title: Operate API methods
  version: 1.0.0
  description: Task-focused operate methods across supported Polymorfa connection types.
servers: []
security: []
paths:
  /messaging/features/evaluate:
    post:
      tags:
        - Feature Availability
      summary: Evaluate features
      description: >-
        Returns registered feature decisions for the authenticated organization
        and requested surface. Unknown, retired, and unauthorized features are
        omitted. Decisions do not grant permission to perform an action.
        Organization and project credentials can read decisions; client tokens
        cannot. Machine credentials receive control variants and no exposure
        token. Responses must not be cached.
      operationId: nativeEvaluateFeatures
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
                - surface
                - keys
              properties:
                surface:
                  type: string
                  pattern: ^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$
                  maxLength: 100
                  description: |-
                    Specifies surface for this schema.

                    <!-- polymorfa-input-table -->
                    **Value constraints**
                    | Constraint | Accepted input |
                    | --- | --- |
                    | String length | At most `100` characters |
                    | Pattern | `^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$` |
                keys:
                  type: array
                  maxItems: 50
                  items:
                    type: string
                    pattern: ^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$
                    maxLength: 100
                  description: |-
                    Keys associated with this schema.

                    <!-- polymorfa-input-table -->
                    **Value constraints**
                    | Constraint | Accepted input |
                    | --- | --- |
                    | Array size | At most `50` items |
                    | Item string length | At most `100` characters |
                    | Item pattern | `^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$` |
                measurementAllowed:
                  type: boolean
                  default: false
                  description: >-
                    Ignored for machine credentials; machine decisions use the
                    control variant.
      responses:
        '200':
          description: Feature decisions
          headers:
            Cache-Control:
              schema:
                type: string
                example: no-store
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                properties:
                  success:
                    type: boolean
                    enum:
                      - true
                    description: |-
                      Whether the request succeeded.

                      <!-- polymorfa-input-table -->
                      **Allowed values**
                      | Value | Meaning |
                      | --- | --- |
                      | `true` | True. |
                  data:
                    type: array
                    items:
                      type: object
                      required:
                        - decision
                        - title
                        - description
                        - termsRevision
                        - withdrawal
                        - exposureToken
                      properties:
                        decision:
                          type: object
                          required:
                            - key
                            - version
                            - available
                            - enrolled
                            - variant
                            - experimentAssigned
                          properties:
                            key:
                              type: string
                              pattern: ^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$
                              maxLength: 100
                              description: >-
                                Specifies key for this decision.


                                <!-- polymorfa-input-table -->

                                **Value constraints**

                                | Constraint | Accepted input |

                                | --- | --- |

                                | String length | At most `100` characters |

                                | Pattern | `^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$`
                                |
                            version:
                              type: integer
                              minimum: 1
                              description: |-
                                Specifies version for this decision.

                                <!-- polymorfa-input-table -->
                                **Value constraints**
                                | Constraint | Accepted input |
                                | --- | --- |
                                | Numeric value | `1` or greater |
                            available:
                              type: boolean
                              description: Whether this capability is available.
                            enrolled:
                              type: boolean
                              description: Whether enrolled.
                            variant:
                              type: string
                              nullable: true
                              description: |-
                                Specifies variant for this decision.

                                <!-- polymorfa-input-table -->
                                **Accepted alternatives**
                                | Alternative | Accepted input |
                                | --- | --- |
                                | Alternative 1 | Type: `string` |
                                | Alternative 2 | `null` |
                            experimentAssigned:
                              type: boolean
                              description: >-
                                True only when an experiment assigned a
                                registered variant with measurement enabled.
                          description: Structured decision values for this data.
                        title:
                          type: string
                          description: >-
                            Human-readable title shown to the recipient or
                            operator.
                        description:
                          type: string
                          description: Human-readable description of this resource.
                        termsRevision:
                          type: string
                          nullable: true
                          description: |-
                            Specifies terms revision for this data.

                            <!-- polymorfa-input-table -->
                            **Accepted alternatives**
                            | Alternative | Accepted input |
                            | --- | --- |
                            | Alternative 1 | Type: `string` |
                            | Alternative 2 | `null` |
                        withdrawal:
                          type: string
                          nullable: true
                          description: |-
                            Specifies withdrawal for this data.

                            <!-- polymorfa-input-table -->
                            **Accepted alternatives**
                            | Alternative | Accepted input |
                            | --- | --- |
                            | Alternative 1 | Type: `string` |
                            | Alternative 2 | `null` |
                        exposureToken:
                          type: string
                          nullable: true
                          description: |-
                            Null for machine credentials.

                            <!-- polymorfa-input-table -->
                            **Accepted alternatives**
                            | Alternative | Accepted input |
                            | --- | --- |
                            | Alternative 1 | Type: `string` |
                            | Alternative 2 | `null` |
                    description: Structured data carried by this object.
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__ErrorResponse'
        '401':
          description: Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__ErrorResponse'
        '403':
          description: Credential not permitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__ErrorResponse'
        '413':
          description: Request exceeds 16 KiB
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__ErrorResponse'
        '500':
          description: Decision authority unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/native__ErrorResponse'
      security:
        - native__BearerAuth: []
      servers:
        - url: https://api.polymorfa.com
components:
  schemas:
    native__ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message
        code:
          type: string
          description: >-
            Stable machine-readable error code, present on safety and
            entitlement refusals
        retryAfter:
          type: integer
          description: >-
            Seconds until the request can be retried, present on paced refusals
            and retryable service pauses
        docs:
          type: string
          description: URL to the documentation for this error
      required:
        - error
  securitySchemes:
    native__BearerAuth:
      type: http
      scheme: bearer
      description: >-
        Polymorfa organization key (pmfa_ prefix), project token (pmfa_pt_
        prefix) where supported, or short-lived client token (pmfa_ct_ prefix).
        Organization and project keys may be personal or service-account owned
        and enforce selected action scopes. Organization keys cover the team and
        its projects; project tokens stay inside one project. Client tokens stay
        inside their live project and session and enforce their client rules.

````