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

# Evaluate an unsigned transaction against the treasury policies

> Takes the serialized unsigned transaction a wallet holds immediately before signing, simulates it, derives every outbound value movement (value leaving a signer’s accounts toward an external wallet), and evaluates them against the policy catalog listed by `GET /v2/intents/policies` — the same catalog `POST /v2/intents/evaluate` checks a hand-declared intent against. Each policy is judged at its scope: the per-transaction ceiling and the concentration projection once, on the combined value of every movement (`transaction_breaches`); sanctions screening and the unverified-counterparty threshold once per recipient, on everything sent to it (`movements[].breaches`). USD values are priced by Range at evaluation time, never taken from the caller. Any breach blocks the transaction. Advisory and read-only — evaluating records nothing and notifies no one; the caller’s signing flow owns the decision. When anything evaluable could not be evaluated (an unpriced asset, an unresolvable recipient), the response says so via `coverage: partial` and `notes` — an `allowed` with partial coverage is not a clean bill.



## OpenAPI

````yaml /api-reference/platform-api.json post /v2/transactions/evaluate
openapi: 3.0.0
info:
  title: Range Platform API
  description: >-
    The Range Platform API for workspace management, counterparties, and
    operational tooling.
  version: 1.7.29
  contact: {}
servers:
  - url: https://api.range.org
    description: Range API Server
security:
  - Authorization: []
  - Authorization: []
tags:
  - name: Address Information
    description: Get information about a crypto address.
  - name: Transfer Enrichments
    description: Attach workspace-scoped notes and categories to transfers.
  - name: Counterparties
    description: Manage external entities, their addresses, bank accounts, and documents.
  - name: Parties
    description: >-
      The workspace entity register: the firm itself, its clients, and its
      counterparties.
paths:
  /v2/transactions/evaluate:
    post:
      tags:
        - Intents
      summary: Evaluate an unsigned transaction against the treasury policies
      description: >-
        Takes the serialized unsigned transaction a wallet holds immediately
        before signing, simulates it, derives every outbound value movement
        (value leaving a signer’s accounts toward an external wallet), and
        evaluates them against the policy catalog listed by `GET
        /v2/intents/policies` — the same catalog `POST /v2/intents/evaluate`
        checks a hand-declared intent against. Each policy is judged at its
        scope: the per-transaction ceiling and the concentration projection
        once, on the combined value of every movement (`transaction_breaches`);
        sanctions screening and the unverified-counterparty threshold once per
        recipient, on everything sent to it (`movements[].breaches`). USD values
        are priced by Range at evaluation time, never taken from the caller. Any
        breach blocks the transaction. Advisory and read-only — evaluating
        records nothing and notifies no one; the caller’s signing flow owns the
        decision. When anything evaluable could not be evaluated (an unpriced
        asset, an unresolvable recipient), the response says so via `coverage:
        partial` and `notes` — an `allowed` with partial coverage is not a clean
        bill.
      operationId: evaluate
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EvaluateTransactionRequestDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EvaluateTransactionResponseDto'
components:
  schemas:
    EvaluateTransactionRequestDto:
      type: object
      properties:
        network:
          type: string
          enum:
            - solana
          example: solana
        transaction:
          type: string
          minLength: 1
          maxLength: 4096
          description: >-
            The complete serialized unsigned transaction — account list,
            instructions, blockhash — as one encoded string (what a wallet holds
            immediately before signing).
          example: AQAAAAAAAAAA…
        encoding:
          enum:
            - base64
            - base58
          type: string
          description: Encoding of `transaction`. Defaults to base64.
        signer_address:
          type: string
          maxLength: 64
          description: >-
            The signing account. Honored only when it is a required signer of
            the payload; defaults to the fee payer derived from the payload.
      required:
        - network
        - transaction
    EvaluateTransactionResponseDto:
      type: object
      properties:
        verdict:
          type: string
          enum:
            - blocked
            - allowed
          description: >-
            Worst outcome across the evaluation: any `transaction_breaches`
            entry or any breached movement blocks the transaction. Both outcomes
            are HTTP 200. Advisory — the caller’s signing flow owns the
            decision.
        coverage:
          type: string
          enum:
            - complete
            - partial
          description: >-
            Partial when anything evaluable was not fully evaluated: an unpriced
            asset (its value is in no USD total), an unresolvable recipient or
            sender, an authority grant, a truncated movement list, an unresolved
            signer, or no extracted movement at all. A partial `allowed` is not
            a clean bill — read `notes`.
        network:
          type: string
          example: solana
        payload_sha256:
          type: string
          description: SHA-256 of the decoded payload bytes — the evaluation’s identity.
        signer:
          type: string
          description: The signer the evaluation ran against.
        transaction_breaches:
          description: >-
            Breaches of per-transaction policies (the transaction value ceiling,
            the asset concentration projection), judged once on the combined USD
            value of every priced movement. They belong to no single movement,
            so they are not repeated under `movements`.
          type: array
          items:
            $ref: '#/components/schemas/IntentBreachDto'
        movements:
          type: array
          items:
            $ref: '#/components/schemas/EvaluatedMovementDto'
        notes:
          type: array
          items:
            $ref: '#/components/schemas/EvaluationNoteDto'
        policies_in_catalog:
          type: number
          example: 4
          description: >-
            Size of the policy catalog this evaluation ran against — the catalog
            at `GET /v2/intents/policies`.
        evaluated_at:
          type: string
          description: When the evaluation ran (ISO 8601).
        meta:
          $ref: '#/components/schemas/EvaluateTransactionMetaDto'
      required:
        - verdict
        - coverage
        - network
        - payload_sha256
        - transaction_breaches
        - movements
        - notes
        - policies_in_catalog
        - evaluated_at
        - meta
    IntentBreachDto:
      type: object
      properties:
        policy_key:
          type: string
          example: treasury.asset_concentration
          description: >-
            Stable identifier of the breached policy, as listed by `GET
            /v2/intents/policies`.
        policy_type:
          type: string
          example: concentration
        policy_name:
          type: string
          example: Asset concentration bound
        reason:
          type: string
          example: >-
            Projected asset share for USDC is 34.2%, above the 30% bound
            (currently 28.1%)
        projected_effect:
          type: object
          description: >-
            What the intent would do, in the terms of the policy that refused
            it. Discriminated on `kind`; this is the preview of the breach.
          example:
            kind: concentration
            dimension: asset
            subject: USDC
            current_share_percent: 28.1
            projected_share_percent: 34.2
            bound_percent: 30
      required:
        - policy_key
        - policy_type
        - policy_name
        - reason
        - projected_effect
    EvaluatedMovementDto:
      type: object
      properties:
        kind:
          type: string
          enum:
            - transfer
            - authority_grant
          description: >-
            Whether this row moves balance, or hands control of an account to
            another key.
        from:
          type: string
          nullable: true
          description: >-
            Owner wallet the value leaves — one of the payload’s required
            signers, which in a sponsored or co-signed payload need not be the
            fee payer. For an `authority_grant`, the account’s current
            authority. Null when the payload does not state it.
        to:
          type: string
          description: Owner wallet the value reaches.
        asset:
          type: string
          example: USDC
          description: >-
            Display symbol when the asset store knows the asset; otherwise the
            raw mint, or `SOL` for native movements.
        mint:
          type: string
          nullable: true
          example: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
          description: Token mint, or null for native SOL.
        amount:
          type: string
          nullable: true
          example: '100.5'
          description: >-
            Simulated quantity in asset units, as a decimal string. Null for an
            `authority_grant` — control moved, not balance.
        amount_usd:
          type: string
          nullable: true
          example: '100.52'
          description: >-
            USD value priced by Range at evaluation time — never
            caller-supplied. Null when the asset has no known price; the
            USD-denominated policies are then reported in `policies_skipped`,
            not silently passed.
        priced:
          type: boolean
          description: False when `amount_usd` is null — a coverage gap, not $0.
        verdict:
          type: string
          enum:
            - blocked
            - allowed
        breaches:
          description: >-
            Breaches of per-recipient policies (sanctions screening, unverified
            counterparty) over this movement’s recipient, judged on everything
            the transaction sends that recipient across assets. A
            USD-denominated breach is listed only on the movements whose value
            it counted. Per-transaction breaches are in `transaction_breaches`.
          type: array
          items:
            $ref: '#/components/schemas/IntentBreachDto'
        policies_evaluated:
          type: number
          example: 4
          description: >-
            How many catalog policies counted this movement, at the transaction
            or recipient scope.
        policies_skipped:
          type: array
          items:
            $ref: '#/components/schemas/SkippedPolicyDto'
      required:
        - kind
        - from
        - to
        - asset
        - mint
        - amount
        - amount_usd
        - priced
        - verdict
        - breaches
        - policies_evaluated
        - policies_skipped
    EvaluationNoteDto:
      type: object
      properties:
        code:
          type: string
          example: movement-unpriced
        message:
          type: string
      required:
        - code
        - message
    EvaluateTransactionMetaDto:
      type: object
      properties:
        movements_total:
          type: number
          description: Distinct outbound movements derived, authority grants included.
        authority_grants:
          type: number
          description: >-
            Authority-grant rows (setAuthority / approve), one per granting
            wallet and grantee. Every grantee is screened, and any grant is a
            partial-coverage cause.
        movements_evaluated:
          type: number
          description: >-
            Movements that ran policy checks — `movements_total` minus any
            dropped past the evaluation cap.
        self_transfers_skipped:
          type: number
          description: Credits back to the signer, skipped by design.
        program_credits_skipped:
          type: number
          description: >-
            Credits owned by canonical infrastructure programs (rent, wrapping),
            skipped by design.
        unresolved_recipients:
          type: number
          description: >-
            Credited token accounts with no resolvable owner wallet — their
            recipients were NOT evaluated.
        movements_truncated:
          type: boolean
          description: True when movements over the evaluation cap were dropped.
        simulate_ms:
          type: number
        evaluate_ms:
          type: number
        total_ms:
          type: number
      required:
        - movements_total
        - authority_grants
        - movements_evaluated
        - self_transfers_skipped
        - program_credits_skipped
        - unresolved_recipients
        - movements_truncated
        - simulate_ms
        - evaluate_ms
        - total_ms
    SkippedPolicyDto:
      type: object
      properties:
        policy_key:
          type: string
          example: treasury.transaction_ceiling
        policy_type:
          type: string
          example: value_ceiling
        policy_name:
          type: string
          example: Per-transaction value ceiling
        reason:
          type: string
          example: >-
            Not evaluated: the movement asset has no USD price and this policy
            is denominated in USD.
      required:
        - policy_key
        - policy_type
        - policy_name
        - reason
  securitySchemes:
    Authorization:
      type: apiKey
      in: header
      name: X-API-KEY
      description: Authorization method required to allow user to access the api endpoints.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.