Transfer

POST/wallet/transfer
Cryptographically Attested

Parameters (Kit SDK)

When using @sonabuild/kit, you only provide these parameters. The SDK automatically handles context (wallet, origin) and encryption.

recipientstringrequired

Recipient wallet address

amountnumberrequired

Amount to transfer (in token units, not lamports)

mintstring

Token mint address (omit for SOL transfers)

symbolstring

Token symbol (e.g., "USDC", "SOL")

memostring

Optional memo (max 566 characters)

Full Request Schema (Direct API)

If calling the API directly (without Kit), send this complete structure. The Kit SDK constructs this automatically from your params.

encryptedstringrequired

Sealed box encrypted payload

hintobjectrequired

Plaintext hint for hint verification

contextobjectrequired
walletstringrequired

User wallet public key

originstringrequired

Request origin URL

paramsobjectrequired
recipientstringrequired

Recipient wallet address

amountnumberrequired

Amount to transfer (in token units, not lamports)

mintstring

Token mint address (omit for SOL transfers)

symbolstring

Token symbol (e.g., "USDC", "SOL")

memostring

Optional memo (max 566 characters)

includeAttestationboolean

Whether to include attestation in response

Response Schema

All responses follow this structure. The data field contains operation-specific results (see example response →).

successbooleanrequired
transactionstring

Base64 encoded signed transaction

attestationobject
signaturestringrequired

Attestation signature

docstring

NSM attestation document (base64, includes PCR measurements)

metadataobject
protocolstringrequired
operationstringrequired
timestampnumberrequired
dataobject
transferobjectrequired
fromstringrequired

Solana wallet or account address (Base58)

tostringrequired

Solana wallet or account address (Base58)

amountstringrequired

Amount transferred in lamports

mintstring

Solana wallet or account address (Base58)

symbolstringrequired
errorstring | null
# Attested operations require encrypted payloads
# Use @sonabuild/kit SDK to handle encryption automatically
curl -X POST https://api.sona.build/wallet/transfer \
  -H "Content-Type: application/json" \
  -d '{
  "encrypted": "base64_encrypted_payload_from_kit",
  "hint": {
    "context": {
      "wallet": "YourWalletPublicKey",
      "origin": "https://your-app.com"
    },
    "params": {
      "recipient": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
      "amount": 100000000
    }
  },
  "includeAttestation": true
}'

Example Response

{
  "transaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQACC...",
  "attestation": {
    "signature": "PWT2ZBBQ2p0ZuDw+cysk1KfY6OGlCV03TY3W4K63yrgvF+81L2HFctankBsqaIMM110YiJk9v+miitHHevcjDw==",
    "pcrs": {}
  },
  "metadata": {
    "protocol": "wallet",
    "operation": "operation",
    "timestamp": 1770779937055
  },
  "data": {
    "result": "success"
  }
}

Cryptographic Attestation

This endpoint generates transactions in a secure enclave. Every transaction includes a cryptographic attestation that can be verified before signing.

Calling directly without the SDK? See our Manual Encryption Guide to learn how to encrypt payloads for attested endpoints.