> ## 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.

# Create a contract execution

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

Calls a function on an EVM smart contract from a non-custodial account (`custodyType` `self`). The call runs asynchronously on the account's home blockchain; `blockchain` must match it. Contract execution must be enabled for your entity and the blockchain.

Describe the call in one of two ways:
- `abiFunctionSignature` and `abiParameters`. Send `abiParameters` as `[]`
  for a function without arguments.

- `callData`, the encoded call data.

`amount` is the native value sent with the call. Omit it to send none. The end user doesn't need to hold the native token to pay network fees. You can't set the fee level, gas, or nonce.

The request must carry an `X-Device-Authorization` header that the end user's authorization key signed over this exact request. The Digital Asset Accounts SDK builds and signs the request, and your backend relay forwards the body and the header unchanged. Don't reformat the JSON, reorder fields, or add default values. This operation doesn't need a Strong Customer Authentication (SCA) challenge.

A new request returns `201` with the execution in `pending`. To retry after a timeout or a lost response, resend the identical body and `X-Device-Authorization` header, even if the header has since expired. Circle returns `200` with the execution in its current state, including a failure, and doesn't run the call again. Reusing an `idempotencyKey` for the same account with a different body or header returns `409`.

Get the result with `GET /v1/accounts/contractExecutions/{id}`, or subscribe to the `account.contractExecution` webhook. To list executions, call `GET /v1/accounts/transactions` with `accountId` set to the account and `type` set to `contract_execution`.



## OpenAPI

````yaml openapi/accounts.yaml post /v1/accounts/contractExecutions
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:
    post:
      tags:
        - Contract Executions
      summary: Create a contract execution
      description: >-
        Non-custodial accounts are available in sandbox only. Production
        non-custodial accounts are on the roadmap.


        Calls a function on an EVM smart contract from a non-custodial account
        (`custodyType` `self`). The call runs asynchronously on the account's
        home blockchain; `blockchain` must match it. Contract execution must be
        enabled for your entity and the blockchain.


        Describe the call in one of two ways:

        - `abiFunctionSignature` and `abiParameters`. Send `abiParameters` as
        `[]`
          for a function without arguments.

        - `callData`, the encoded call data.


        `amount` is the native value sent with the call. Omit it to send none.
        The end user doesn't need to hold the native token to pay network fees.
        You can't set the fee level, gas, or nonce.


        The request must carry an `X-Device-Authorization` header that the end
        user's authorization key signed over this exact request. The Digital
        Asset Accounts SDK builds and signs the request, and your backend relay
        forwards the body and the header unchanged. Don't reformat the JSON,
        reorder fields, or add default values. This operation doesn't need a
        Strong Customer Authentication (SCA) challenge.


        A new request returns `201` with the execution in `pending`. To retry
        after a timeout or a lost response, resend the identical body and
        `X-Device-Authorization` header, even if the header has since expired.
        Circle returns `200` with the execution in its current state, including
        a failure, and doesn't run the call again. Reusing an `idempotencyKey`
        for the same account with a different body or header returns `409`.


        Get the result with `GET /v1/accounts/contractExecutions/{id}`, or
        subscribe to the `account.contractExecution` webhook. To list
        executions, call `GET /v1/accounts/transactions` with `accountId` set to
        the account and `type` set to `contract_execution`.
      operationId: createAccountContractExecution
      parameters:
        - $ref: '#/components/parameters/DeviceAuthorization'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContractExecutionCreationRequest'
            examples:
              abiCall:
                summary: Call a function by its ABI signature
                value:
                  idempotencyKey: 11111111-1111-4111-8111-111111111111
                  accountId: 22222222-2222-4222-8222-222222222222
                  blockchain: ETH
                  contractAddress: '0x1111111111111111111111111111111111111111'
                  abiFunctionSignature: approve(address,uint256)
                  abiParameters:
                    - '0x3333333333333333333333333333333333333333'
                    - '1000000'
              rawCall:
                summary: Call with encoded call data and send native value
                value:
                  idempotencyKey: 55555555-5555-4555-8555-555555555555
                  accountId: 22222222-2222-4222-8222-222222222222
                  blockchain: ETH
                  contractAddress: '0x1111111111111111111111111111111111111111'
                  callData: '0xd0e30db0'
                  amount: '0.1'
      responses:
        '200':
          description: >-
            Retry of an accepted request. Returns the execution in its current
            state.
          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
            Location:
              description: >-
                Path of the contract execution, for `GET
                /v1/accounts/contractExecutions/{id}`.
              schema:
                type: string
                example: >-
                  /v1/accounts/contractExecutions/44444444-4444-4444-8444-444444444444
          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'
        '201':
          description: >-
            Successfully accepted the contract execution. The call runs
            asynchronously.
          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
            Location:
              description: >-
                Path of the contract execution, for `GET
                /v1/accounts/contractExecutions/{id}`.
              schema:
                type: string
                example: >-
                  /v1/accounts/contractExecutions/44444444-4444-4444-8444-444444444444
          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 request can't be processed. For example, the body is invalid,
            both or neither ways of describing the call are present, `amount`
            has too many decimal places, the account isn't non-custodial,
            `blockchain` doesn't match the account, or the
            `X-Device-Authorization` header is missing, has expired, or was
            signed by a device whose clock is more than 60 seconds off (error
            code 420031).
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/DeviceAuthorizationNotAuthorized'
        '403':
          description: >-
            Your API key lacks permission, or contract execution isn't enabled
            for your entity or this blockchain (error code 420089).
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: The account doesn't exist or doesn't belong to your entity.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: |-
            One of two conflicts.

            - Error code 420034: the `idempotencyKey` was already used for this
              account with a different body or `X-Device-Authorization` header. The
              Digital Asset Accounts SDK signs a new header on every call, so a
              retry through the SDK returns this code whenever the original request
              reached Circle. It means an execution with that key already exists.
              The error doesn't include the execution ID. Find it with
              `GET /v1/accounts/transactions` for the account with `type` set to
              `contract_execution`, and match the contract address
              (`destination`), `amount`, and time. Send the call again with a new
              `idempotencyKey` only if every execution that matches has the status
              `failed`. If any match isn't `failed`, or you can't tell which
              execution is yours, don't send it again.

            - Error code 420090: the account isn't in the `active` state.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: The request body is larger than 64 KiB (error code 420067).
          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. The execution might have been
            accepted; retry with the identical body and `X-Device-Authorization`
            header.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
components:
  parameters:
    DeviceAuthorization:
      name: X-Device-Authorization
      in: header
      required: true
      description: >
        Compact ES256 JWS that the Digital Asset Accounts SDK creates on the end
        user's device. It signs this request's method, path, and exact body
        bytes (an empty body for `GET` requests) with the authorization key the
        end user registered. The SDK creates a new value for every new request.


        A missing value returns `400` (error code 420031). A value that isn't a
        well-formed compact JWS returns `401` (error code 420031).


        The SDK gives each value an expiry at most 5 minutes after it signs it.
        Unless the operation says otherwise, Circle rejects a value whose expiry
        has passed or whose signing time is in the future, allowing 60 seconds
        of clock difference either way, with `400` (error code 420031). A device
        clock that's off by more than 60 seconds causes the same error. Retry
        within the value's lifetime, or let the SDK sign the request again.


        Your backend relay must forward this header, and the request body,
        exactly as the SDK sent them. Don't parse, reformat, or re-serialize the
        body. If the bytes change, Circle rejects the request.
      schema:
        $ref: '#/components/schemas/DeviceAuthorizationJws'
  schemas:
    ContractExecutionCreationRequest:
      type: object
      additionalProperties: false
      description: >-
        A contract call from a non-custodial account. Describe the call either
        with `abiFunctionSignature` and `abiParameters`, or with `callData`.
        Circle rejects unknown fields, duplicate keys, and `null` values. The
        body can be at most 64 KiB.
      required:
        - idempotencyKey
        - accountId
        - blockchain
        - contractAddress
      allOf:
        - $ref: '#/components/schemas/ContractExecutionInvocation'
      properties:
        idempotencyKey:
          allOf:
            - $ref: '#/components/schemas/IdempotencyKey'
          pattern: >-
            ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$
        accountId:
          type: string
          format: uuid
          description: >-
            ID of the non-custodial account that makes the call. The account
            must be `active` and belong to your entity.
          example: 22222222-2222-4222-8222-222222222222
        blockchain:
          $ref: '#/components/schemas/ContractExecutionRequestBlockchain'
        contractAddress:
          $ref: '#/components/schemas/ContractExecutionAddress'
        callData:
          $ref: '#/components/schemas/ContractExecutionCallData'
        abiFunctionSignature:
          $ref: '#/components/schemas/ContractExecutionAbiFunctionSignature'
        abiParameters:
          $ref: '#/components/schemas/ContractExecutionAbiParameters'
        amount:
          allOf:
            - $ref: '#/components/schemas/ContractExecutionNativeAmount'
          description: >-
            Native value to send with the call, in whole units of the
            blockchain's native asset (ETH, or USDC on Arc). Omit it to send
            none; don't send `"0"` unless the end user signed it. This is
            separate from the network fee and from token amounts in
            `abiParameters`.
    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'
    DeviceAuthorizationJws:
      type: string
      description: >-
        Compact ES256 JWS created by the Digital Asset Accounts SDK on the end
        user's device.
      minLength: 64
      maxLength: 8192
      example: >-
        eyJhbGciOiJFUzI1NiJ9.e30.AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0-Pw
    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
    IdempotencyKey:
      type: string
      description: >-
        Universally unique identifier (UUID v4) idempotency key. This key is
        utilized to ensure exactly-once execution of mutating requests.
      format: uuid
      example: ba943ff1-ca16-49b2-ba55-1057e70ca5c7
    ContractExecutionRequestBlockchain:
      type: string
      enum:
        - ETH
        - ARB
        - CBASE
        - OP
        - UNI
        - ARC
      description: >-
        Home blockchain of the account; must match it. Send `CBASE` for Base;
        responses return `BASE`. The environment, not this value, decides
        mainnet or testnet. Not every blockchain is available in every
        environment.
      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'
    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'
    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'
    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.
    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'
    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
    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
    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'
  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'
  responses:
    DeviceAuthorizationNotAuthorized:
      description: >
        The request lacks valid API credentials, or a device authorization
        header (`X-Device-Authorization` or `X-Registration-Flow-Authorization`)
        is present but isn't a well-formed compact JWS (error code 420031).
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: 420031
            message: The device authorization is invalid
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````