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

> ## Agent Instructions
> Before reading these docs, install the relevant Circle Skill to get pre-loaded context — skills are LLM-optimized and cover architecture decisions, correct flows, and common pitfalls. In Claude Code: run /plugin marketplace add circlefin/skills then /plugin install circle-skills@circle. With Vercel Skills CLI: run npx skills add circlefin/skills. Available skills: use-usdc https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-usdc/SKILL.md (balances, transfers, approvals on EVM and Solana); EURC has no skill — see https://developers.circle.com/stablecoins/what-is-eurc.md; bridge-stablecoin https://github.com/circlefin/skills/blob/master/plugins/circle/skills/bridge-stablecoin/SKILL.md (crosschain transfers via CCTP, USDC, EURC, and third-party assets); use-arc https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-arc/SKILL.md (Arc chain config, contract deployment, USDC bridging — Arc docs: https://docs.arc.io/llms.txt); use-circle-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-circle-wallets/SKILL.md (choose wallet type); use-developer-controlled-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-developer-controlled-wallets/SKILL.md (custodial wallets for payouts and treasury); use-user-controlled-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-user-controlled-wallets/SKILL.md (embedded wallets with Web2 login); use-modular-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-modular-wallets/SKILL.md (smart contract wallets with passkeys and ERC-4337); use-gateway https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-gateway/SKILL.md (unified USDC balance, nanopayments); use-smart-contract-platform https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-smart-contract-platform/SKILL.md (deploy, interact, monitor contracts). Pair any skill with the Circle MCP server for live SDK signatures, contract addresses, and chain IDs: {"mcpServers":{"circle":{"url":"https://api.circle.com/v1/codegen/mcp"}}}.
> Read the product overview first. Each product has an overview explaining when and why to use it. Read it before quickstarts.
> Pick the right wallet type. Developer-controlled (you hold keys), user-controlled (end user holds keys via PIN/social login), or modular (smart contract wallets with passkeys). See https://developers.circle.com/wallets.md.
> Use CCTP V2 for crosschain transfers. CCTP natively transfers USDC and EURC via burn-and-mint, and supports permissionless wrapping of third-party assets via lock-and-mint. V1 is legacy; always use V2 unless V1 is specified or the chain requires it (Noble, Sui, and Aptos still require V1). Migration guide: https://developers.circle.com/cctp/migration-from-v1-to-v2.md.
> Use Bridge Kit for frontend bridging. Wraps CCTP with a simpler SDK for user-facing apps. Use CCTP directly for backend transfers.
> Gas Station vs Paymaster. Gas Station sponsors gas for Circle Wallet transactions. Paymaster lets users pay gas in USDC. Different use cases — read both overviews.
> Gateway Nanopayments for sub-cent payments. Gasless USDC micropayments down to $0.000001 via x402 and batched settlement. For pay-per-request APIs, AI agent payments, streaming.
> Look up USDC addresses per chain. Never hardcode — use https://developers.circle.com/stablecoins/usdc-contract-addresses.md.
> Prefer SDKs over raw API calls. Node.js and Python SDKs handle auth, retries, and errors.
> API key required. Bearer token in Authorization header. Testnet and mainnet use separate keys and may use different base URLs depending on the product.
> Set up webhooks when available. Most operations are async. Webhooks deliver transaction confirmations and state changes.
> When calling list endpoints, paginate using pageSize and pageAfter until no nextPageAfter cursor is returned—stopping at the first page silently misses records.
> Building an AI agent? Start with the Agent Stack—Circle CLI, agent wallets, and nanopayments built for autonomous use cases: https://developers.circle.com/agent-stack.md.

# Get a contract execution

> Non-custodial accounts are available in sandbox only. Production non-custodial accounts are on the roadmap.

Retrieves a contract execution created by your entity, including the call that was requested and, once known, its transaction hash and network fee. This call uses your API key only; it doesn't need an `X-Device-Authorization` header. You can read existing executions even if contract execution is no longer enabled for your entity.



## OpenAPI

````yaml openapi/accounts.yaml get /v1/accounts/contractExecutions/{id}
openapi: 3.1.0
info:
  version: 1.0.0
  title: Accounts (Stablecoin) API
  description: >
    Circle's Accounts API provides endpoints for managing stablecoin accounts --
    including transfers,

    withdrawals, deposits, wire and ACH bank accounts, and blockchain addresses.


    An **Account** is a general representation of a ledger or custody object
    that holds balances. It can be a business account,

    a stablecoin account ledger for an end user, an extra sub-ledger, or any
    future custody solution.
  license:
    name: Circle License
    url: https://circle.com/terms
servers:
  - url: https://api-sandbox.circle.com
  - url: https://api.circle.com
security: []
tags:
  - name: Accounts
    description: Manage accounts.
  - name: Account Groups
    description: Manage custody account groups and their memberships.
  - name: Limits
    description: View effective account limits and current usage.
  - name: Transfers
    description: >
      Move funds between accounts or out to a verified blockchain address, and
      track inbound and outbound onchain transfers.
  - name: Contract Executions
    description: >-
      Execute EVM contract calls from non-custodial accounts and track their
      results.
  - name: Transactions
    description: |
      Get a unified, customer-friendly view of account transaction activity.
  - name: Wires
    description: Manage account bank accounts for wire transfers.
  - name: Deposits
    description: Get information on account bank deposits.
  - name: Withdrawals
    description: Manage account bank withdrawals (fiat offramp).
  - name: ACH
    description: Manage account bank accounts for ACH transfers.
  - name: Deposit Addresses
    description: Manage account deposit addresses.
  - name: Recipient Addresses
    description: Manage account recipient addresses used for transfers.
  - name: Device Authentication
    description: >
      Sign in end users of non-custodial accounts with a social login, and
      register the authorization key that signs their non-custodial requests.
      The Digital Asset Accounts SDK builds these requests on the end user's
      device, and your backend relay forwards them with your API key.
  - name: Passkeys
    description: >
      Manage WebAuthn passkeys and Strong Customer Authentication (SCA)
      challenges for end users.
  - name: Crypto Payments
    description: >
      Get crypto payments and crypto refunds received through payment intents.
      Available for Digital Asset Accounts only on custody accounts (`purpose:
      custody`), and only for third-party payments. Not supported when the
      distributor or the end user is under the Circle FR (`CIRCLE_FR`) or Circle
      SG (`CIRCLE_SG`) legal entity.
  - name: Crypto Payment Intents
    description: >
      Create, expire, refund, and track payment intents for receiving crypto
      payments. Available for Digital Asset Accounts only on custody accounts
      (`purpose: custody`), and only for third-party payments. Not supported
      when the distributor or the end user is under the Circle FR (`CIRCLE_FR`)
      or Circle SG (`CIRCLE_SG`) legal entity.
  - name: Crypto Payouts
    description: >
      Create and track crypto payouts to recipient addresses. Available for
      Digital Asset Accounts only on custody accounts (`purpose: custody`), and
      only for third-party payouts. Not supported when the distributor or the
      end user is under the Circle FR (`CIRCLE_FR`) or Circle SG (`CIRCLE_SG`)
      legal entity.
  - name: Crypto Address Book
    description: >
      Manage address book recipients used as crypto payout destinations.
      Available for Digital Asset Accounts only on custody accounts (`purpose:
      custody`), and only for third-party payouts. Not supported when the
      distributor or the end user is under the Circle FR (`CIRCLE_FR`) or Circle
      SG (`CIRCLE_SG`) legal entity.
  - name: FX Trades
    description: |
      Quote and execute USDC <> EURC swaps for end users' accounts.
  - name: FX Settlements
    description: Get settlements of FX trades.
  - name: Webhook Subscriptions
    description: Manage subscriptions to Digital Asset Accounts webhook notifications.
  - name: Webhooks
    description: |
      Webhook event payloads Circle sends to a subscribed endpoint.
paths:
  /v1/accounts/contractExecutions/{id}:
    get:
      tags:
        - Contract Executions
      summary: Get a contract execution
      description: >-
        Non-custodial accounts are available in sandbox only. Production
        non-custodial accounts are on the roadmap.


        Retrieves a contract execution created by your entity, including the
        call that was requested and, once known, its transaction hash and
        network fee. This call uses your API key only; it doesn't need an
        `X-Device-Authorization` header. You can read existing executions even
        if contract execution is no longer enabled for your entity.
      operationId: getAccountContractExecution
      parameters:
        - $ref: '#/components/parameters/IdPath'
      responses:
        '200':
          description: Successfully retrieved the contract execution.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
            Cache-Control:
              description: Always `no-store`. Don't cache contract execution responses.
              schema:
                type: string
                enum:
                  - no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContractExecutionResponse'
              example:
                data:
                  id: 44444444-4444-4444-8444-444444444444
                  status: pending
                  source:
                    type: account
                    id: 22222222-2222-4222-8222-222222222222
                  custodyType: self
                  blockchain: ETH
                  contractAddress: '0x1111111111111111111111111111111111111111'
                  abiFunctionSignature: approve(address,uint256)
                  abiParameters:
                    - '0x3333333333333333333333333333333333333333'
                    - '1000000'
                  amount:
                    amount: '0.000000000000000000'
                    currency: ETH
                  createDate: '2026-10-28T12:00:00Z'
                  updateDate: '2026-10-28T12:00:00Z'
        '400':
          description: The ID isn't a valid UUID.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: The request lacks valid API credentials.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Your API key lacks permission to read contract executions.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            The contract execution doesn't exist or doesn't belong to your
            entity (error code 420088).
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too many requests.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: An unexpected error occurred.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
components:
  parameters:
    IdPath:
      name: id
      description: Universally unique identifier (UUID v4) of a resource.
      in: path
      required: true
      schema:
        type: string
        format: uuid
        example: b3d9d2d5-4c12-4946-a09d-953e82fae2b0
  headers:
    XRequestId:
      description: >
        Circle-generated universally unique identifier (UUID v4). Useful for
        identifying a specific request when communicating with Circle Support.
      schema:
        $ref: '#/components/schemas/XRequestId'
  schemas:
    ContractExecutionResponse:
      type: object
      additionalProperties: false
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/ContractExecution'
    Error:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: integer
          description: >
            Circle internal status code from the platform `CoreStatusCode` enum
            (and its domain-specific extensions). **This is not the HTTP status
            code** — `-1` is the catch-all unknown error, `1`/`2` indicate API
            parameter problems, `3` is forbidden, `4` is unauthorized, and
            larger values identify domain-specific failures. Consumers should
            rely on the HTTP status line for transport-level error class and on
            this field for the specific Circle error case.
          example: 2
        message:
          type: string
          description: >-
            Internal error message; suitable for logging but not for end-user
            display.
          example: API parameter invalid.
        externalMessage:
          type: string
          description: >
            End-user-displayable error message. Present when the server has
            generated a customer-facing variant for this error; omitted
            otherwise.
          example: The provided amount exceeds the maximum allowed.
        errors:
          type: array
          description: Additional request-field validation errors, when available.
          items:
            $ref: '#/components/schemas/ErrorDetail'
    XRequestId:
      type: string
      format: uuid
      example: 2adba88e-9d63-44bc-b975-9b6ae3440dde
    ContractExecution:
      type: object
      description: >-
        A contract execution: the call that was requested, its status, and, once
        known, the blockchain transaction hash and network fee. Transaction
        lists and webhooks carry a shorter summary without `callData` or
        `abiParameters`.
      allOf:
        - $ref: '#/components/schemas/ContractExecutionBase'
        - $ref: '#/components/schemas/ContractExecutionInvocation'
      properties:
        callData:
          $ref: '#/components/schemas/ContractExecutionCallData'
        abiFunctionSignature:
          $ref: '#/components/schemas/ContractExecutionAbiFunctionSignature'
        abiParameters:
          $ref: '#/components/schemas/ContractExecutionAbiParameters'
      unevaluatedProperties: false
    ErrorDetail:
      type: object
      required:
        - error
        - message
      properties:
        error:
          type: string
          description: Machine-readable error identifier.
          example: invalid_value
        location:
          type: string
          description: Query parameter or request field that caused the error.
          example: assetType
        message:
          type: string
          description: Human-readable description of the specific error.
          example: The operation and assetType combination is invalid.
    ContractExecutionBase:
      type: object
      description: Fields shared by a contract execution and its webhook summary.
      required:
        - id
        - status
        - source
        - custodyType
        - blockchain
        - contractAddress
        - amount
        - createDate
        - updateDate
      properties:
        id:
          type: string
          format: uuid
          description: ID of the contract execution.
          example: 44444444-4444-4444-8444-444444444444
        status:
          $ref: '#/components/schemas/ContractExecutionStatus'
        source:
          description: The non-custodial account that made the call.
          allOf:
            - $ref: '#/components/schemas/AccountLocation'
        custodyType:
          type: string
          description: Always `self`.
          enum:
            - self
        blockchain:
          $ref: '#/components/schemas/ContractExecutionBlockchain'
        contractAddress:
          $ref: '#/components/schemas/ContractExecutionAddress'
        amount:
          $ref: '#/components/schemas/ContractExecutionNativeMoney'
        transactionHash:
          type: string
          pattern: ^0x[0-9a-fA-F]{64}$
          description: >-
            Hash of the blockchain transaction, once known. Also present on
            failure when the call reached the blockchain.
          example: '0xabababababababababababababababababababababababababababababababab'
        networkFee:
          description: >-
            Network fee the blockchain charged for the call, once known,
            including calls that reverted. Currently omitted for executions on
            `ARC`.
          allOf:
            - $ref: '#/components/schemas/ContractExecutionNativeMoney'
        errorCode:
          $ref: '#/components/schemas/ContractExecutionErrorCode'
        createDate:
          $ref: '#/components/schemas/UtcTimestamp'
        updateDate:
          $ref: '#/components/schemas/UtcTimestamp'
      if:
        properties:
          status:
            const: failed
      then:
        required:
          - errorCode
      else:
        not:
          required:
            - errorCode
    ContractExecutionInvocation:
      type: object
      description: >-
        Exactly one way of describing the call: `callData`, or
        `abiFunctionSignature` together with `abiParameters`.
      oneOf:
        - required:
            - callData
          not:
            anyOf:
              - required:
                  - abiFunctionSignature
              - required:
                  - abiParameters
        - required:
            - abiFunctionSignature
            - abiParameters
          not:
            required:
              - callData
    ContractExecutionCallData:
      type: string
      minLength: 4
      maxLength: 32770
      pattern: ^0x([0-9a-fA-F]{2})*$
      description: >-
        Encoded call data: `0x` followed by an even number of hexadecimal
        digits, between 1 and 16,384 bytes. Can't be combined with
        `abiFunctionSignature` or `abiParameters`.
      example: '0xd0e30db0'
    ContractExecutionAbiFunctionSignature:
      type: string
      minLength: 1
      maxLength: 1000
      pattern: >-
        ^[A-Za-z_$][A-Za-z0-9_$]*\((?:(?:(?:address|bool|string|bytes(?:[1-9]|[12][0-9]|3[0-2])?|u?int(?:8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256))|uint256\[\]|uint256\[2\]|uint256\[\]\[\]|uint256\[\]\[2\]|address\[\]|bool\[2\]|bytes32\[\]|string\[\]|bytes\[\])(?:,(?:(?:address|bool|string|bytes(?:[1-9]|[12][0-9]|3[0-2])?|u?int(?:8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256))|uint256\[\]|uint256\[2\]|uint256\[\]\[\]|uint256\[\]\[2\]|address\[\]|bool\[2\]|bytes32\[\]|string\[\]|bytes\[\]))*)?\)$
      not:
        pattern: \s
      description: >-
        Canonical signature of the function, such as `approve(address,uint256)`,
        with no spaces or parameter names. Supported parameter types are
        `address`, `bool`, `string`, `bytes`, `bytes1` through `bytes32`, and
        `int8` through `int256` and `uint8` through `uint256` in steps of 8.
        Supported array types are `uint256[]`, `uint256[2]`, `uint256[][]`,
        `uint256[][2]`, `address[]`, `bool[2]`, `bytes32[]`, `string[]`, and
        `bytes[]`. For other types, such as tuples, `uint`, or other arrays, use
        `callData`.
      example: approve(address,uint256)
    ContractExecutionAbiParameters:
      type: array
      maxItems: 1024
      description: >-
        Arguments in the order of `abiFunctionSignature`. Send `[]` for a
        function without arguments. Each value is a string, a boolean, an
        integer, or a nested array. Send integers outside the safe JSON range
        (more than 2^53 - 1 in magnitude) as decimal strings. Arrays can nest up
        to eight levels, counting this array, and the tree can hold at most
        1,024 values below this array.
      example:
        - '0x3333333333333333333333333333333333333333'
        - '1000000'
      items:
        $ref: '#/components/schemas/ContractExecutionAbiParameter'
    ContractExecutionStatus:
      type: string
      enum:
        - pending
        - complete
        - failed
      description: >-
        - `pending`: Circle accepted the call and is signing, submitting, or
          confirming it.

        - `complete`: the call succeeded on the blockchain.

        - `failed`: the call was rejected before submission, or failed or
        reverted
          on the blockchain. See `errorCode`.
    AccountLocation:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          enum:
            - account
        id:
          type: string
          description: The identifier of the account.
          example: '1000662322'
    ContractExecutionBlockchain:
      type: string
      enum:
        - ETH
        - ARB
        - BASE
        - OP
        - UNI
        - ARC
      description: >-
        Home blockchain of the account that made the call. These are the EVM
        blockchains available for non-custodial accounts that support contract
        execution. For Base, send `CBASE` in requests; responses return `BASE`.
      example: ETH
    ContractExecutionAddress:
      type: string
      minLength: 42
      maxLength: 42
      pattern: ^0x[0-9a-fA-F]{40}$
      not:
        enum:
          - '0x0000000000000000000000000000000000000000'
      description: >-
        Address of the contract to call. Circle checks the format only, not that
        the contract implements the function.
      example: '0x1111111111111111111111111111111111111111'
    ContractExecutionNativeMoney:
      type: object
      additionalProperties: false
      description: >-
        Native value sent with the call. Zero when the request omitted `amount`.
        Doesn't include token transfers made by the contract or the network fee.
      required:
        - amount
        - currency
      properties:
        amount:
          $ref: '#/components/schemas/ContractExecutionNativeAmount'
        currency:
          type: string
          enum:
            - ETH
            - USD
          description: '`ETH` on ETH-native blockchains. `USD` is native USDC on Arc.'
    ContractExecutionErrorCode:
      type: string
      enum:
        - authorization_failed
        - execution_denied
        - insufficient_funds
        - insufficient_network_fee
        - blockchain_error
        - contract_execution_failed
      description: >-
        Why the execution failed. Present only when `status` is `failed`.


        - `authorization_failed`: Circle couldn't verify the end user's
        authorization.

        - `execution_denied`: Circle's policy didn't allow the call.

        - `insufficient_funds`: the account doesn't hold enough of the native
        asset
          for `amount`.

        - `insufficient_network_fee`: the blockchain rejected the call because
        the
          network fee wasn't covered. Retry later, or contact Circle support if it
          continues.

        - `blockchain_error`: the call failed or reverted on the blockchain.

        - `contract_execution_failed`: any other failure.
    UtcTimestamp:
      type: string
      description: ISO-8601 UTC date/time format.
      example: '2020-04-10T02:13:30.000Z'
    ContractExecutionAbiParameter:
      description: >-
        A string, a boolean, an integer, or a nested array. Circle rejects
        objects, `null`, numbers with a fractional part or an exponent
        (including `1.0` and `1e3`), and integers outside the safe JSON range. A
        numeric string stays a string.
      oneOf:
        - type: string
        - type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        - type: boolean
        - type: array
          maxItems: 1024
          items:
            $ref: '#/components/schemas/ContractExecutionAbiParameter'
    ContractExecutionNativeAmount:
      type: string
      maxLength: 39
      pattern: ^(0|[1-9][0-9]{0,19})(\.[0-9]{1,18})?$
      description: >-
        Nonnegative decimal string with at most 20 integer digits and 18 decimal
        places. On `ARC`, use at most 2 decimal places. Responses pad the value
        to the asset's precision, for example `0.100000000000000000` ETH or
        `0.10` USD on Arc.
      example: '0.1'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````