---
title: "Evaluate Solana Transaction"
method: POST
path: "/v0/platform/cosigners/{id}/solana/evaluate"
tags: ["external"]
---

# Evaluate Solana Transaction

`POST /v0/platform/cosigners/{id}/solana/evaluate`

Test your cosigner policies against Solana transactions. You can simulate a transaction before it is sent, look up past transactions by signature, or evaluate everything that happened in a given time range.

## Path parameters

- `id` string, required — Cosigner ID

## Request body

- union
  - object — Simulate a single encoded Solana transaction against cosigner policies.
    - `chain` 'mainnet', required — Solana chain, "mainnet" is supported only.
    - `evaluation_type` 'simulate', required — Evaluation mode.
    - `inline_policies` object[], nullable — Optional list of inline policy definitions to evaluate against instead of persisted policies. When provided, the cosigner's stored policies are ignored and these are used instead. Priority is derived from list order (index 0 = highest).
      - `action` string, required — Policy action: "approve", "reject", or "pending".
      - `name` string, required — Policy name.
      - `policy` object, required — Policy definition with policy_type_id, conditions, targets, etc.
    - `metadata` object — Additional context. Accepts a "domain" key for the dapp origin domain.
    - `transaction` string, required — Base58-encoded Solana transaction to evaluate.
  - object — Evaluate one or more already-broadcast Solana transactions by signature. The service fetches each transaction's encoded bytes from a Solana RPC and routes them through the historical pipeline, returning a per-policy summary.
    - `chain` 'mainnet', required — Solana chain, e.g. "mainnet", "devnet".
    - `evaluation_type` 'signatures', required — Evaluation mode.
    - `inline_policies` object[], nullable — Optional list of inline policy definitions to evaluate against instead of persisted policies. When provided, the cosigner's stored policies are ignored and these are used instead. Priority is derived from list order (index 0 = highest).
      - `action` string, required — Policy action: "approve", "reject", or "pending".
      - `name` string, required — Policy name.
      - `policy` object, required — Policy definition with policy_type_id, conditions, targets, etc.
    - `show_transaction_detail_for` string[], nullable — Transaction lists for asked verdicts.
    - `signatures` string[], required — Base58-encoded Solana transaction signatures to evaluate.
  - object — Evaluate Solana transactions in a time window resolved from on-chain history.
    - `chain` 'mainnet', required — Solana chain, e.g. "mainnet", "devnet".
    - `evaluation_type` 'time_period', required — Evaluation mode.
    - `show_transaction_detail_for` string[], nullable — Transaction lists for asked verdicts.
    - `time_period` object, required — Time window for query.
      - `from` string, date-time, required — Start of window (inclusive, ISO 8601).
      - `to` string, date-time, required — End of window (inclusive, ISO 8601).

## Response `200`

Successful Response

- union
  - EvaluateTransactionResponse — Response containing the policy evaluation result for the submitted EVM transaction.
    - `policies` PoliciesExternal, required
      - `decision` 'approve' | 'reject' | 'error' | 'pending', required — Policy decision outcome: "approve", "reject", "error", or "pending".
      - `reason` string, nullable — Human-readable reason for the decision. Present when a policy matched.
      - `matched_policy` MatchedPolicyInfoExternal
        - `name` string, required — Policy name.
        - `action` string, required — Action defined by the policy.
        - `type` string, required — Policy type.
      - `trace` PolicyTraceEntryExternal[], required — Per-policy evaluation log.
        - `name` string, required — Policy name.
        - `action` string, required — Action defined by the policy.
        - `type` string, required — Policy type.
        - `result` 'matched' | 'not_matched' | 'skipped', required — Evaluation result for this policy entry: "matched", "not_matched", or "skipped".
      - `should_handle_pending_tx` boolean, nullable — True when this dry-run pending result means a real scan would create a manual pending transaction.
    - `scan_id` string, nullable
  - EvaluateHistoricalDataResponse — Response containing the policy evaluation result for historical data.
    - `cosigner_id` string, required — The cosigner that was evaluated.
    - `chain` string, required — Chain used for evaluation.
    - `summary` EvaluationSummary, required — Aggregated counts across all transactions. Note: ``rejected`` includes transactions blocked before policy evaluation (non-benign scans). Per-policy counts only reflect transactions that reached policy evaluation, so ``sum(p.rejected for p in policies)`` may be less than ``summary.rejected``.
      - `total_transactions` integer, required — Total number of transactions scanned for this evaluation.
      - `approved` integer, required — Transactions approved by all policies under this mode.
      - `rejected` integer, required — Transactions rejected by at least one policy or blocked before policy evaluation (non-benign scans). Per-policy counts only reflect transactions that reached policy evaluation, so the sum of per-policy rejected counts may be less than this value.
      - `manual_approved` integer, required — Transactions that required manual approval (pending decision).
    - `policies` PolicyEvaluationSummary[], required — Per-policy aggregates and optional transaction hash lists.
      - `policy_id` string, required — Policy identifier.
      - `policy_name` string, required — Human-readable policy name.
      - `total_evaluated` integer, required — Transactions evaluated against this policy (excludes non-benign scans where policy eval was skipped).
      - `approved` integer, required — Count approved for this policy.
      - `rejected` integer, required — Count rejected for this policy.
      - `manual_approved` integer, required — Count manually approved for this policy.
      - `approved_transactions` string[], nullable — Tx hashes when "approved" was requested in show_transaction_detail_for.
      - `rejected_transactions` string[], nullable — Tx hashes when "rejected" was requested in show_transaction_detail_for.
      - `manual_approved_transactions` string[], nullable — Tx hashes when "manual_approved" was requested in show_transaction_detail_for.
      - `policy_type` string, nullable — Policy type identifier.
    - `scan` object, nullable — Full scan payload of the first scanned transaction. Used for publishing to platform-api.
    - `scan_id` string, nullable — Scan ID of the first scanned transaction. Present for single-tx evaluations.
    - `scan_result` string, nullable — Result type of the first scanned transaction. Present for single-tx evaluations.
    - `scan_timestamp` string, nullable — ISO timestamp of the first scanned transaction. Present for single-tx evaluations.
    - `transaction_timestamp` string, nullable — ISO timestamp for the on-chain transaction when available from the scan (for example block or transaction time). Distinct from scan_timestamp when both are present.

## Other responses

- `404` — Cosigner not found
- `422` — Validation Error

---

[API](https://skmtc.net/blockaid-official/apis/blockaid-api.md) · [All operations](https://skmtc.net/blockaid-official/apis/blockaid-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/blockaid-official/blockaid-api/versions/17c41f337b2e/schema)
