---
title: "Resolve the executing target for one Base transaction"
method: POST
path: "/v1/transaction/preflight"
tags: ["Capabilities"]
---

# Resolve the executing target for one Base transaction

`POST /v1/transaction/preflight`

## Request

- Base URL: `https://api.m2msentinel.com`
- URL: `https://api.m2msentinel.com/v1/transaction/preflight`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer
  - API key in header `x-rapidapi-key`

API-key/RapidAPI metered transaction-specific evidence. Accepts one strictly validated Base mainnet transaction, pins one observation block before state-bearing reads, identifies the supplied four-byte selector and resolved implementation or Diamond facet, returns bytecode hashes, capability evidence and an eth_call observation when possible. Incomplete or unsupported paths stay explicit. The caller owns policy before signing. This route is not x402-payable and has no x402 price; an unauthenticated request receives the normal protected-route 401 response.

## Request body

- TransactionPreflightRequest
  - `chainId` union, required: Base mainnet only; decimal or canonical hexadecimal quantity.
    - 8453
    - '8453' | '0x2105'
  - `to` string, required
  - `data` string, required: Even-length calldata. The shared HTTP JSON body limit is 32kb.
  - `from` string
  - `value` union
    - integer
    - string
  - `blockNumber` union: Optional explicit historical block. It is pinned exactly; latest is never used as a fallback.
    - integer
    - string

## Response `200`

Verified or explicit bounded unverified transaction evidence. No safety, maliciousness, reachability, or exploitability conclusion is returned.

- TransactionPreflightResponse
  - `status` 'SUCCESS' | 'UNVERIFIED', required
  - `operation` 'TRANSACTION_PREFLIGHT_OBSERVATION', required
  - `request` TransactionPreflightRequest, required
    - `chainId` union, required: Base mainnet only; decimal or canonical hexadecimal quantity.
      - 8453
      - '8453' | '0x2105'
    - `to` string, required
    - `data` string, required: Even-length calldata. The shared HTTP JSON body limit is 32kb.
    - `from` string
    - `value` union
      - integer
      - string
    - `blockNumber` union: Optional explicit historical block. It is pinned exactly; latest is never used as a fallback.
      - integer
      - string
  - `selectorHex` string, nullable, required
  - `surfaceTarget` string, required
  - `surfaceTargetInfo` TransactionPreflightNode, required
    - `address` string, required
    - `bytecodeAvailable` boolean, required
    - `bytecodeSizeBytes` integer, required
    - `runtimeBytecodeHash` string, nullable, required
  - `resolvedExecutionTarget` string, nullable, required
  - `resolvedImplementation` string, nullable, required
  - `resolvedFacet` string, nullable, required
  - `completeResolutionPath` TransactionPreflightPathEdge[], required
    - union
      - object
        - `address` string, required
        - `from` string
        - `to` string
        - `via` string, required
        - `blockTag` string, required
      - object
        - `address` string
        - `from` string, required
        - `to` string, required
        - `via` string, required
        - `blockTag` string, required
  - `resolution` TransactionPreflightResolution, required
    - `status` 'COMPLETE' | 'NO_CODE' | 'UNRESOLVED' | 'UNRESOLVED_EIP7702_DELEGATION' | 'UNRESOLVED_EIP1167_TARGET' | 'UNRESOLVED_BEACON' | 'UNSUPPORTED_CUSTOM_DISPATCH' | 'AMBIGUOUS_PROXY_STATE' | 'CYCLE_DETECTED' | 'MAX_DEPTH_EXCEEDED' | 'DIAMOND_SELECTOR_UNAVAILABLE' | 'DIAMOND_SELECTOR_NOT_MOUNTED' | 'DIAMOND_RESOLUTION_INCOMPLETE' | 'RPC_READ_UNVERIFIED', required
    - `resolutionComplete` boolean, required
    - `proxyType` string, required
    - `proxyTypes` string[], required
    - `reason` string, nullable
    - `path` TransactionPreflightPathEdge[], required
      - union
        - object
          - `address` string, required
          - `from` string
          - `to` string
          - `via` string, required
          - `blockTag` string, required
        - object
          - `address` string
          - `from` string, required
          - `to` string, required
          - `via` string, required
          - `blockTag` string, required
    - `nodes` TransactionPreflightNode[], required
      - `address` string, required
      - `bytecodeAvailable` boolean, required
      - `bytecodeSizeBytes` integer, required
      - `runtimeBytecodeHash` string, nullable, required
    - `beaconAddress` string, nullable
    - `diamond` TransactionPreflightDiamond
      - `supportsInterface` boolean, required
      - `usedFacetsFallback` boolean, required
      - `facetCount` integer
      - `selectorCount` integer
      - `selector` string, nullable, required
      - `selectedFacet` string, nullable, required
      - `facets` TransactionPreflightFacet[], required
        - `address` string, required
        - `bytecodeAvailable` boolean, required
        - `bytecodeSizeBytes` integer, required
        - `runtimeBytecodeHash` string, nullable, required
        - `selectors` string[], required
  - `bytecodeHashes` TransactionPreflightBytecodeHashes, required
    - `runtimeBytecodeHash` string, nullable, required
    - `finalTargetBytecodeHash` string, nullable, required
    - `facetBytecodeHash` string, nullable, required
    - `facetBytecodeHashes` object[], required
      - `address` string, required
      - `runtimeBytecodeHash` string, nullable, required
      - `selectors` string[], required
  - `capabilityEvidence` TransactionPreflightCapabilityEvidence, required
    - `sourceAddress` string, required
    - `executionRole` 'RESOLVED_EXECUTING_CODE' | 'SELECTED_DIAMOND_FACET', required
    - `transactionSelector` string, nullable, required
    - `notASafetyGuarantee` true, required
    - `reachability` 'NOT_ESTABLISHED', required
    - `dissection` Dissection, required
      - `isValidContract` boolean
      - `bytecodeSizeBytes` integer
      - `targetBytecodeHash` string, nullable: Cryptographic SHA-256 hash of the analyzed bytecode
      - `capabilities` Capability[]
        - `type` 'DELEGATECALL' | 'SELFDESTRUCT' | 'MINT_SELECTOR' | 'PAUSE_SELECTOR' | 'FREEZE_SELECTOR', required
        - `confidence` 'HIGH' | 'MEDIUM' | 'LOW', required
        - `reachability` 'NOT_ESTABLISHED', required
        - `byteOffsetHex` string
        - `selectorHex` string
        - `snippetHex` string
        - `evidence` string, required
      - `detectedCapabilities` string[]
      - `metadata` object
        - `disclaimer` string
  - `simulationObservation` TransactionPreflightSimulationObservation, required
    - `attempted` boolean, required
    - `outcome` 'NOT_ATTEMPTED' | 'SUCCEEDED' | 'REVERTED' | 'UNAVAILABLE' | 'MALFORMED', required
    - `trusted` boolean
    - `returnData` string
    - `blockTag` string
    - `evidenceOnly` true, required
    - `error` object
      - `code` string
      - `message` string
    - `reason` string
    - `note` string
  - `evidenceGrade` boolean, required
  - `evidenceStatus` 'VERIFIED' | 'UNVERIFIED', required
  - `reason` string
  - `effectiveTrust` 'HIGH_TRUST_PRIMARY' | 'QUORUM_PUBLIC' | 'DEGRADED_LOW_TRUST', required
  - `observationBlock` TransactionPreflightObservationBlock, required
    - `status` 'PINNED' | 'UNVERIFIED', required
    - `chainId` 8453, required
    - `network` 'eip155:8453', required
    - `blockNumber` union, required
      - integer
      - string
    - `blockHash` string, nullable, required
    - `blockTag` string, nullable, required
    - `trustLevel` 'HIGH_TRUST_PRIMARY' | 'QUORUM_PUBLIC' | 'DEGRADED_LOW_TRUST', required
    - `providerName` string, required
    - `agreement` integer, nullable, required
    - `sampled` integer, nullable, required
    - `retrievedAt` string, date-time, required
    - `originalRetrievalTime` string, date-time, required
    - `headProvider` string
    - `reason` string
    - `note` string
  - `rpcObservation` TransactionPreflightRpcObservation, required
    - `pinnedBlockTag` string, required
    - `stateBearingCallCount` integer, required
    - `failedReadCount` integer, required
    - `failures` object[], required
      - `code` string, required
      - `message` string, required
      - `method` string
    - `calls` object[], required
  - `notASafetyGuarantee` true, required
  - `reachability` 'NOT_ESTABLISHED', required
  - `limitations` string[], required
  - `conclusion` unknown, required

## Other responses

- `400`: The strict transaction preflight body failed validation before RPC, persistence, or quota work.
- `401`: Missing or invalid credential, or a credential was supplied in the query string
- `402`: The authenticated key has no remaining decision credit. This route does not offer an x402 challenge or price.
- `405`: Verb not supported. HEAD is refused on protected routes because it would execute a metered handler while suppressing the body.
- `429`: A plan burst limit or bounded public/intent retry limit was exceeded
- `503`: A trusted pinned Base observation or required surface read was unavailable. No decision credit was consumed.

---

[API](https://skmtc.dev/m2msentinel/apis/m2m-sentinel-base-contract-capability-checks-before-you-sign.md) · [All operations](https://skmtc.dev/m2msentinel/apis/m2m-sentinel-base-contract-capability-checks-before-you-sign/llms.txt) · [OpenAPI document](https://skmtc.dev/m2msentinel/apis/m2m-sentinel-base-contract-capability-checks-before-you-sign/revisions/2dadd4e704fd?raw)
