Skip to main content
POST
/
v1
/
apps
/
{app_id}
/
intents
/
wallets
/
{wallet_id}
/
rpc
Create RPC intent
curl --request POST \
  --url https://api.privy.io/v1/apps/{app_id}/intents/wallets/{wallet_id}/rpc \
  --header 'Authorization: Basic <encoded-value>' \
  --header 'Content-Type: application/json' \
  --header 'privy-app-id: <privy-app-id>' \
  --data '{
  "method": "eth_signTransaction",
  "params": {
    "transaction": {
      "from": "<string>",
      "to": "<string>",
      "chain_id": "<string>",
      "nonce": "<string>",
      "data": "<string>",
      "value": "<string>",
      "type": 0,
      "gas_limit": "<string>",
      "gas_price": "<string>",
      "max_fee_per_gas": "<string>",
      "max_priority_fee_per_gas": "<string>"
    }
  },
  "address": "<string>",
  "chain_type": "ethereum"
}'
{
  "intent_id": "clpq1234567890abcdefghij",
  "intent_type": "RPC",
  "created_by_display_name": "[email protected]",
  "created_by_id": "did:privy:clabcd123",
  "created_at": 1741834854578,
  "resource_id": "xs76o3pi0v5syd62ui1wmijw",
  "authorization_details": [
    {
      "members": [
        {
          "type": "user",
          "user_id": "did:privy:clabcd123",
          "display_name": "[email protected]",
          "has_signed": false
        }
      ],
      "threshold": 1,
      "display_name": "Admin Key Quorum"
    }
  ],
  "status": "pending",
  "expires_at": 1741921254578,
  "request_details": {
    "method": "POST",
    "url": "https://api.privy.io/v1/wallets/xs76o3pi0v5syd62ui1wmijw/rpc",
    "body": {
      "method": "eth_sendTransaction",
      "caip2": "eip155:8453",
      "chain_type": "ethereum",
      "params": {
        "transaction": {
          "to": "0x0000000000000000000000000000000000000000",
          "value": 1
        }
      }
    }
  }
}

Authorizations

Authorization
string
header
required

Basic Auth header with your app ID as the username and your app secret as the password.

Headers

privy-app-id
string
required

ID of your Privy app.

Path Parameters

app_id
string
required

ID of the app.

wallet_id
string
required

ID of the wallet.

Body

application/json
  • Option 1
  • Option 2
  • Option 3
  • Option 4
  • Option 5
  • Option 6
  • Option 7
  • Option 8
  • Option 9
method
enum<string>
required
Available options:
eth_signTransaction
params
object
required
address
string
chain_type
enum<string>
Available options:
ethereum

Response

200 - application/json

Created RPC intent.

Response for an RPC intent creation request

intent_id
string
required

Unique ID for the intent

created_by_display_name
string
required

Display name of the user who created the intent

created_at
number
required

Unix timestamp when the intent was created

resource_id
string
required

ID of the resource being modified (wallet_id, policy_id, etc)

authorization_details
object[]
required

Detailed authorization information including key quorum members, thresholds, and signature status

status
enum<string>
required

Current status of the intent

Available options:
pending,
executed,
failed,
expired,
rejected
expires_at
number
required

Unix timestamp when the intent expires

intent_type
enum<string>
required
Available options:
RPC
request_details
object
required

The original RPC request that would be sent to the wallet endpoint

created_by_id
string

ID of the user who created the intent. If undefined, the intent was created using the app secret

current_resource_data
object

Current state of the wallet before any changes. If undefined, the resource was deleted and no longer exists

Example:
{
"id": "id2tptkqrxd39qo9j423etij",
"address": "0xF1DBff66C993EE895C8cb176c30b07A559d76496",
"chain_type": "ethereum",
"policy_ids": [],
"additional_signers": [],
"owner_id": "rkiz0ivz254drv1xw982v3jq",
"created_at": 1741834854578,
"exported_at": null,
"imported_at": null
}
action_result
object

Result of RPC execution (only present if status is 'executed' or 'failed')