gulltoppr Transactions API

The transactions API from gulltoppr — 3 operation(s) for transactions.

GitHub OpenAPI

Operations 3

POST /v1/{chain}/simulate Simulate raw calldata or a high-level contract call #
POST /v1/{chain}/{address}/prepare Prepare an unsigned transaction with simulation and safety metadata #
GET /v1/{chain}/tx/{hash} Decode and explain a transaction #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/gulltoppr-dev:gulltoppr-dev-transactions-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

gulltoppr-dev-transactions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: gulltoppr REST Transactions API
  version: 1.0.0
  description: 'Agent-facing EVM contract interaction API: resolve ABIs, read, encode, simulate, prepare unsigned transactions, decode transactions, resolve names, and export the selector commons.'
  license:
    name: MIT
    identifier: MIT
  contact:
    name: gulltoppr
    url: https://gulltoppr.dev
  x-docs: https://gulltoppr.dev/integrations.md
  x-llms: https://gulltoppr.dev/llms.txt
  x-sdk: https://www.npmjs.com/package/gulltoppr
  x-mcp-remote: https://mcp.gulltoppr.dev/mcp
  x-mcp-metadata:
  - https://mcp.gulltoppr.dev/server.json
  - https://mcp.gulltoppr.dev/.well-known/mcp-server.json
  x-repository: https://github.com/portdeveloper/gulltoppr
servers:
- url: https://api.gulltoppr.dev
  description: Production
- url: http://localhost:8787
  description: Local development
tags:
- name: Transactions
paths:
  /v1/{chain}/simulate:
    post:
      tags:
      - Transactions
      operationId: simulate
      summary: Simulate raw calldata or a high-level contract call
      parameters:
      - $ref: '#/components/parameters/Chain'
      - name: rpc_url
        in: query
        required: false
        description: Override HTTP(S) RPC URL for the requested chain. Required for local or unlisted EVM chains.
        schema:
          type: string
          pattern: ^https?://\S+$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SimulateBody'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Simulation'
          headers:
            RateLimit-Limit:
              schema:
                type: integer
                minimum: 0
              description: Fixed-window request budget for the current client.
            RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
              description: Requests remaining in the current fixed window.
            RateLimit-Reset:
              schema:
                type: integer
                minimum: 0
              description: Seconds until the current fixed window resets.
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '422':
          description: ABI not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limited
          headers:
            RateLimit-Limit:
              schema:
                type: integer
                minimum: 0
              description: Fixed-window request budget for the current client.
            RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
              description: Requests remaining in the current fixed window.
            RateLimit-Reset:
              schema:
                type: integer
                minimum: 0
              description: Seconds until the current fixed window resets.
            Retry-After:
              schema:
                type: integer
                minimum: 0
              description: Seconds to wait before retrying after RATE_LIMITED.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '502':
          description: Upstream failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '504':
          description: Upstream timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
  /v1/{chain}/{address}/prepare:
    post:
      tags:
      - Transactions
      operationId: prepareTx
      summary: Prepare an unsigned transaction with simulation and safety metadata
      description: Never signs or broadcasts. Returns unsigned_tx, simulation, human_summary, warnings, safety, a configured signing deeplink, and wallet_request when signing is recommended. Only hand off the deeplink or wallet_request when safety.signing_recommended is true; risk_level=blocked means do not send.
      parameters:
      - $ref: '#/components/parameters/Chain'
      - $ref: '#/components/parameters/Address'
      - name: rpc_url
        in: query
        required: false
        description: Override HTTP(S) RPC URL for the requested chain. Required for local or unlisted EVM chains.
        schema:
          type: string
          pattern: ^https?://\S+$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PrepareTxBody'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreparedTx'
          headers:
            RateLimit-Limit:
              schema:
                type: integer
                minimum: 0
              description: Fixed-window request budget for the current client.
            RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
              description: Requests remaining in the current fixed window.
            RateLimit-Reset:
              schema:
                type: integer
                minimum: 0
              description: Seconds until the current fixed window resets.
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '422':
          description: ABI not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limited
          headers:
            RateLimit-Limit:
              schema:
                type: integer
                minimum: 0
              description: Fixed-window request budget for the current client.
            RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
              description: Requests remaining in the current fixed window.
            RateLimit-Reset:
              schema:
                type: integer
                minimum: 0
              description: Seconds until the current fixed window resets.
            Retry-After:
              schema:
                type: integer
                minimum: 0
              description: Seconds to wait before retrying after RATE_LIMITED.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '502':
          description: Upstream failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '504':
          description: Upstream timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
  /v1/{chain}/tx/{hash}:
    get:
      tags:
      - Transactions
      operationId: decodeTx
      summary: Decode and explain a transaction
      parameters:
      - $ref: '#/components/parameters/Chain'
      - name: hash
        in: path
        required: true
        description: Transaction hash.
        schema:
          type: string
          pattern: ^0x[0-9a-fA-F]{64}$
      - name: rpc_url
        in: query
        required: false
        description: Override HTTP(S) RPC URL for the requested chain. Required for local or unlisted EVM chains.
        schema:
          type: string
          pattern: ^https?://\S+$
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DecodeTxResult'
          headers:
            Cache-Control:
              schema:
                type: string
              description: Cache policy for this response. Operational endpoints use no-store; cacheable GETs include max-age and stale-while-revalidate.
            RateLimit-Limit:
              schema:
                type: integer
                minimum: 0
              description: Fixed-window request budget for the current client.
            RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
              description: Requests remaining in the current fixed window.
            RateLimit-Reset:
              schema:
                type: integer
                minimum: 0
              description: Seconds until the current fixed window resets.
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '422':
          description: ABI not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limited
          headers:
            RateLimit-Limit:
              schema:
                type: integer
                minimum: 0
              description: Fixed-window request budget for the current client.
            RateLimit-Remaining:
              schema:
                type: integer
                minimum: 0
              description: Requests remaining in the current fixed window.
            RateLimit-Reset:
              schema:
                type: integer
                minimum: 0
              description: Seconds until the current fixed window resets.
            Retry-After:
              schema:
                type: integer
                minimum: 0
              description: Seconds to wait before retrying after RATE_LIMITED.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '502':
          description: Upstream failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '504':
          description: Upstream timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
components:
  schemas:
    BytecodeMatchProvenance:
      type: object
      required:
      - chain
      - address
      - source
      - confidence
      description: Original ABI source reused because the metadata-stripped runtime bytecode skeleton matched.
      properties:
        chain:
          type: integer
          description: EIP-155 chain id where the reusable bytecode skeleton was first resolved.
        address:
          $ref: '#/components/schemas/Address'
        source:
          $ref: '#/components/schemas/ProvenanceSource'
        confidence:
          $ref: '#/components/schemas/Confidence'
    DecodedCallArg:
      allOf:
      - $ref: '#/components/schemas/IoParam'
      - type: object
        required:
        - value
        properties:
          value: true
    ProvenanceSource:
      type: string
      enum:
      - etherscan
      - sourcify
      - proxy-impl
      - bytecode-match
      - heimdall-decompiled
      - 4byte
    ErrorCode:
      type: string
      enum:
      - INVALID_ADDRESS
      - INVALID_ARGS
      - UNKNOWN_CHAIN
      - AMBIGUOUS_FUNCTION
      - FUNCTION_NOT_FOUND
      - NOT_A_VIEW_FN
      - NOT_A_WRITE_FN
      - ABI_NOT_FOUND
      - DECOMPILE_FAILED
      - RPC_ERROR
      - UPSTREAM_TIMEOUT
      - RATE_LIMITED
    PrepareTxBody:
      allOf:
      - $ref: '#/components/schemas/EncodeCallBody'
      - type: object
        required:
        - from
        properties:
          from:
            $ref: '#/components/schemas/Address'
    TxHash:
      type: string
      pattern: ^0x[0-9a-fA-F]{64}$
    IoParam:
      type: object
      required:
      - name
      - type
      properties:
        name:
          type: string
        type:
          type: string
    Address:
      type: string
      pattern: ^0x[0-9a-fA-F]{40}$
    AssetChange:
      type: object
      required:
      - address
      - token
      - delta
      - kind
      properties:
        address:
          $ref: '#/components/schemas/Address'
        token:
          $ref: '#/components/schemas/Address'
        symbol:
          type: string
        delta:
          $ref: '#/components/schemas/SignedDecimal'
        kind:
          type: string
          enum:
          - erc20
          - erc721
          - erc1155
          - native
    PreparedTx:
      type: object
      required:
      - unsigned_tx
      - simulation
      - human_summary
      - deeplink
      - warnings
      - safety
      properties:
        unsigned_tx:
          $ref: '#/components/schemas/UnsignedTx'
        simulation:
          $ref: '#/components/schemas/Simulation'
        human_summary:
          type: string
        deeplink:
          type: string
          description: Configured signing URL. Empty when safety.signing_recommended is false.
        wallet_request:
          $ref: '#/components/schemas/WalletRequest'
          description: EIP-1193-shaped request for wallet/app integrations. Omitted when safety.signing_recommended is false.
        warnings:
          type: array
          description: Human-readable warnings an agent must show before presenting any signing hand-off.
          items:
            type: string
        safety:
          $ref: '#/components/schemas/PreparedTxSafety'
    Confidence:
      type: string
      enum:
      - verified
      - partial
      - decompiled
      - selector-only
    SignedDecimal:
      type: string
      pattern: ^-?\d+$
      description: Signed decimal integer string.
    FunctionName:
      type: string
      minLength: 1
      pattern: \S
    ErrorEnvelope:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              $ref: '#/components/schemas/ErrorCode'
            message:
              type: string
            details:
              type: object
              additionalProperties: true
    PreparedTxSafety:
      type: object
      required:
      - signing_recommended
      - risk_level
      - requires_human_confirmation
      - reasons
      properties:
        signing_recommended:
          type: boolean
          description: True only when the simulation succeeded and the hand-off may be presented to the user.
        risk_level:
          type: string
          enum:
          - low
          - medium
          - high
          - blocked
          description: blocked means do not send; high means require explicit human confirmation before presenting any hand-off.
        requires_human_confirmation:
          type: boolean
          description: True when provenance, proxy, value, approval, or asset-outflow risks must be shown and confirmed by the user.
        reasons:
          type: array
          description: Machine-readable warnings an agent must surface before any signing hand-off.
          items:
            type: string
            enum:
            - abi_names_inferred
            - proxy
            - simulation_failed
            - native_value
            - spending_approval
            - asset_outflow
    EncodeCallBody:
      allOf:
      - $ref: '#/components/schemas/FunctionCallBody'
      - type: object
        properties:
          value:
            $ref: '#/components/schemas/DecimalWei'
    DecimalWei:
      type: string
      pattern: ^\d+$
      description: Native value in wei, decimal string.
    WalletTransactionRequest:
      type: object
      required:
      - from
      - to
      - data
      - value
      properties:
        from:
          $ref: '#/components/schemas/Address'
        to:
          $ref: '#/components/schemas/Address'
        data:
          $ref: '#/components/schemas/Calldata'
        value:
          $ref: '#/components/schemas/Hex'
          description: JSON-RPC quantity hex.
        gas:
          $ref: '#/components/schemas/Hex'
          description: JSON-RPC quantity hex.
    FunctionCallBody:
      type: object
      required:
      - function
      properties:
        function:
          $ref: '#/components/schemas/FunctionName'
        args:
          type: array
          items: true
          default: []
    WalletRequest:
      type: object
      required:
      - chainId
      - method
      - params
      properties:
        chainId:
          type: integer
          description: Routing metadata; switch the wallet to this chain before requesting signature.
        method:
          type: string
          enum:
          - eth_sendTransaction
        params:
          type: array
          minItems: 1
          maxItems: 1
          items:
            $ref: '#/components/schemas/WalletTransactionRequest'
    Hex:
      type: string
      pattern: ^0x[0-9a-fA-F]*$
    Simulation:
      type: object
      required:
      - success
      - gas_used
      - state_diff
      - asset_changes
      - logs
      properties:
        success:
          type: boolean
        gas_used:
          type: integer
          minimum: 0
        return_value:
          type: object
          required:
          - decoded
          - raw
          properties:
            decoded:
              type: array
              items: true
            raw:
              $ref: '#/components/schemas/Calldata'
        state_diff:
          type: array
          items:
            $ref: '#/components/schemas/StateDiffEntry'
        asset_changes:
          type: array
          items:
            $ref: '#/components/schemas/AssetChange'
        logs:
          type: array
          items:
            $ref: '#/components/schemas/SimLog'
        revert:
          type: object
          required:
          - reason
          properties:
            reason:
              type: string
            decoded:
              type: string
    DecodeTxProvenance:
      type: object
      required:
      - source
      - confidence
      - verified
      - names_synthetic
      properties:
        source:
          type: string
        confidence:
          type: string
          const: decompiled
        verified:
          type: boolean
          const: false
        names_synthetic:
          type: boolean
          const: true
    UnsignedTx:
      type: object
      required:
      - chainId
      - to
      - from
      - data
      - value
      properties:
        chainId:
          type: integer
        to:
          $ref: '#/components/schemas/Address'
        from:
          $ref: '#/components/schemas/Address'
        data:
          $ref: '#/components/schemas/Calldata'
        value:
          $ref: '#/components/schemas/DecimalWei'
        gas:
          $ref: '#/components/schemas/DecimalWei'
    SimLog:
      type: object
      required:
      - address
      properties:
        address:
          $ref: '#/components/schemas/Address'
        event:
          type: string
        args:
          type: object
          additionalProperties: true
    DecodedCall:
      type: object
      required:
      - to
      - function
      - signature
      - args
      - abi_for
      - provenance
      properties:
        to:
          $ref: '#/components/schemas/Address'
        function:
          type: string
        signature:
          type: string
        args:
          type: array
          items:
            $ref: '#/components/schemas/DecodedCallArg'
        abi_for:
          $ref: '#/components/schemas/Address'
        provenance:
          $ref: '#/components/schemas/Provenance'
    SimulateBody:
      oneOf:
      - type: object
        required:
        - from
        - to
        - data
        not:
          anyOf:
          - required:
            - address
          - required:
            - function
          - required:
            - args
        properties:
          from:
            $ref: '#/components/schemas/Address'
          to:
            $ref: '#/components/schemas/Address'
          data:
            $ref: '#/components/schemas/Calldata'
          value:
            $ref: '#/components/schemas/DecimalWei'
      - type: object
        required:
        - from
        - address
        - function
        not:
          anyOf:
          - required:
            - to
          - required:
            - data
        properties:
          from:
            $ref: '#/components/schemas/Address'
          address:
            $ref: '#/components/schemas/Address'
          function:
            $ref: '#/components/schemas/FunctionName'
          args:
            type: array
            items: true
            default: []
          value:
            $ref: '#/components/schemas/DecimalWei'
    StateDiffEntry:
      type: object
      required:
      - address
      - before
      - after
      properties:
        address:
          $ref: '#/components/schemas/Address'
        slot_label:
          type: string
        before:
          type: string
        after:
          type: string
    DecodeTxResult:
      type: object
      required:
      - chain
      - tx_hash
      - source
      - cached
      - decoded
      - provenance
      properties:
        chain:
          type: integer
        tx_hash:
          $ref: '#/components/schemas/TxHash'
        source:
          type: string
        cached:
          type: boolean
        decoded: true
        provenance:
          $ref: '#/components/schemas/DecodeTxProvenance'
        decoded_call:
          $ref: '#/components/schemas/DecodedCall'
    Provenance:
      type: object
      required:
      - source
      - confidence
      - verified
      - names_synthetic
      - natspec
      properties:
        source:
          $ref: '#/components/schemas/ProvenanceSource'
        confidence:
          $ref: '#/components/schemas/Confidence'
        verified:
          type: boolean
        names_synthetic:
          type: boolean
        natspec:
          type: boolean
        bytecode_match:
          $ref: '#/components/schemas/BytecodeMatchProvenance'
        notes:
          type: string
    Calldata:
      type: string
      pattern: ^0x([0-9a-fA-F]{2})*$
  parameters:
    Chain:
      name: chain
      in: path
      required: true
      schema:
        oneOf:
        - type: string
        - type: integer
    Address:
      name: address
      in: path
      required: true
      schema:
        $ref: '#/components/schemas/Address'
externalDocs:
  description: Integration recipes, agent workflow, MCP, SDK, and safety guidance.
  url: https://gulltoppr.dev/integrations.md