Skip to main content
type
enum<string>
required
Enum options: ACTIVITY_TYPE_ETH_SEND_TRANSACTION
timestampMs
string
required
Timestamp (in milliseconds) of the request, used to verify liveness of user requests.
organizationId
string
required
Unique identifier for a given Organization.
parameters
object
required

The parameters object containing the specific intent data for this activity.

generateAppProofs
boolean
Enable to have your activity generate and return App Proofs, enabling verifiability.
A successful response returns the following fields:
activity
object
required
The activity object containing type, intent, and result
curl --request POST \
  --url https://api.turnkey.com/public/v1/submit/eth_send_transaction \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header "X-Stamp: <string> (see Authorizations)" \
  --data '{
    "type": "ACTIVITY_TYPE_ETH_SEND_TRANSACTION",
    "timestampMs": "<string> (e.g. 1746736509954)",
    "organizationId": "<string> (Your Organization ID)",
    "parameters": {
        "from": "<string>",
        "sponsor": "<boolean>",
        "caip2": "<eip155:1>",
        "to": "<string>",
        "value": "<string>",
        "data": "<string>",
        "nonce": "<string>",
        "gasLimit": "<string>",
        "maxFeePerGas": "<string>",
        "maxPriorityFeePerGas": "<string>",
        "gasStationNonce": "<string>"
    }
}'
import { Turnkey } from "@turnkey/sdk-server";

const turnkeyClient = new Turnkey({
  apiBaseUrl: "https://api.turnkey.com",
  apiPublicKey: process.env.API_PUBLIC_KEY!,
  apiPrivateKey: process.env.API_PRIVATE_KEY!,
  defaultOrganizationId: process.env.ORGANIZATION_ID!,
});

const response = await turnkeyClient.apiClient().ethSendTransaction({
  from: "<string> (A wallet or private key address to sign with. This does not support private key IDs.)",
  sponsor: true // Whether to sponsor this transaction via Gas Station.,
  caip2: "<eip155:1>" // CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet).,
  to: "<string> (Recipient address as a hex string with 0x prefix.)",
  value: "<string> (Amount of native asset to send in wei.)",
  data: "<string> (Hex-encoded call data for contract interactions.)",
  nonce: "<string> (Transaction nonce, for EIP-1559 and Turnkey Gas Station authorizations.)",
  gasLimit: "<string> (Maximum amount of gas to use for this transaction, for EIP-1559 transactions.)",
  maxFeePerGas: "<string> (Maximum total fee per gas unit (base fee + priority fee) in wei. Required for non-sponsored (EIP-1559) transactions. Not used for sponsored transactions.)",
  maxPriorityFeePerGas: "<string> (Maximum priority fee (tip) per gas unit in wei. Required for non-sponsored (EIP-1559) transactions. Not used for sponsored transactions.)",
  gasStationNonce: "<string> (The gas station delegate contract nonce. Only used when sponsor=true. Include this if you want maximal security posture.)"
});
{
  "activity": {
    "id": "<activity-id>",
    "status": "ACTIVITY_STATUS_COMPLETED",
    "type": "ACTIVITY_TYPE_ETH_SEND_TRANSACTION",
    "organizationId": "<organization-id>",
    "timestampMs": "<timestamp> (e.g. 1746736509954)",
    "result": {
      "activity": {
        "id": "<string>",
        "organizationId": "<string>",
        "status": "<string>",
        "type": "<string>",
        "intent": {
          "ethSendTransactionIntent": {
            "from": "<string>",
            "sponsor": "<boolean>",
            "caip2": "<eip155:1>",
            "to": "<string>",
            "value": "<string>",
            "data": "<string>",
            "nonce": "<string>",
            "gasLimit": "<string>",
            "maxFeePerGas": "<string>",
            "maxPriorityFeePerGas": "<string>",
            "gasStationNonce": "<string>"
          }
        },
        "result": {
          "ethSendTransactionResult": {
            "sendTransactionStatusId": "<string>"
          }
        },
        "votes": "<array>",
        "fingerprint": "<string>",
        "canApprove": "<boolean>",
        "canReject": "<boolean>",
        "createdAt": "<string>",
        "updatedAt": "<string>"
      }
    }
  }
}