v46

latestOpenAPI 3.1.0raw.githubusercontent.com2026-07-211591,0051.4 MB
Intents

Create transfer intent

Create an intent to execute a token transfer via a wallet. The intent must be authorized by either the wallet owner or signers before it can be executed.

post/v1/intents/wallets/{wallet_id}/transfer

Path parameters

wallet_idstring required

ID of the wallet.

Headers

privy-app-idstring required

ID of your Privy app.

privy-request-expirystring

Request expiry. Value is a Unix timestamp in milliseconds representing the deadline by which the request must be processed.

Request body

amountstring

Amount as a decimal string in the token's standard unit (e.g. "1.5" for 1.5 USDC). For exact_input, the amount to send. For exact_output, the exact amount to receive. Takes precedence over source.amount when both are provided.

amount_type'exact_input' | 'exact_output'

Whether the amount refers to the input token or output token.

slippage_bpsinteger

Maximum allowed slippage in basis points (1 bps = 0.01%). Only applicable for cross-chain or cross-asset transfers; omit to use the provider default.

Example request

{
  "amount": "10.5",
  "destination": {
    "address": "0xB00F0759DbeeF5E543Cc3E3B07A6442F5f3928a2"
  },
  "source": {
    "amount": "10.5",
    "asset": "usdc",
    "chain": "base"
  }
}

Response

Created transfer intent.

created_atnumber required

Unix timestamp when the intent was created

created_by_display_namestring required

Display name of the user who created the intent

created_by_idstring

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

custom_expiryboolean required

Whether this intent has a custom expiry time set by the client. If false, the intent expires after a default duration.

dismissal_reasonstring

Human-readable reason for dismissal, present when status is 'dismissed'

dismissed_atnumber

Unix timestamp when the intent was dismissed, present when status is 'dismissed'

expires_atnumber required

Unix timestamp when the intent expires

intent_idstring required

Unique ID for the intent

rejected_atnumber

Unix timestamp when the intent was rejected, present when status is 'rejected'

resource_idstring required

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

status'pending' | 'processing' | 'executed' | 'failed' | 'expired' | 'rejected' | 'dismissed' required

Current status of an intent.

intent_type'TRANSFER' required

Example response

{
  "action_result": {
    "response_body": {
      "estimated_fees": [
        {
          "amount": "0.20",
          "recipient": "0x1234567890abcdef1234567890abcdef12345678",
          "type": "relayer"
        }
      ],
      "estimated_gas": {
        "amount": "0.0001",
        "base_amount": "100000000000000",
        "gas_asset": "ETH"
      },
      "fees": [
        {
          "amount": "0.20",
          "recipient": "0x1234567890abcdef1234567890abcdef12345678",
          "type": "relayer"
        }
      ],
      "gas": {
        "amount": "0.0001",
        "base_amount": "100000000000000",
        "gas_asset": "ETH"
      }
    }
  },
  "current_resource_data": {
    "additional_signers": [],
    "address": "0xF1DBff66C993EE895C8cb176c30b07A559d76496",
    "archived_at": null,
    "chain_type": "ethereum",
    "created_at": 1741834854578,
    "display_name": "Treasury",
    "exported_at": null,
    "external_id": "my-order-123",
    "id": "id2tptkqrxd39qo9j423etij",
    "imported_at": null,
    "owner_id": "rkiz0ivz254drv1xw982v3jq",
    "policy_ids": []
  },
  "request_details": {
    "body": {
      "amount": "10.5",
      "destination": {
        "address": "0xB00F0759DbeeF5E543Cc3E3B07A6442F5f3928a2"
      },
      "source": {
        "amount": "10.5",
        "asset": "usdc",
        "chain": "base"
      }
    }
  }
}