For the complete documentation index, see llms.txt. This page is also available as Markdown.

Transfer

Transfer tokens between shielded balances

post

Relays a shielded-to-shielded transfer to a recipient. recipientAddress accepts either the recipient's recipientInfo (from GET /recipient-info) or a plain public address (Ethereum address on EVM/Tron chains, Solana address on Solana).

EVM / Tron: feeToken is required in the request body.

Solana: feeToken is not used — the server always uses tokenAddresses[0] as the fee token regardless of what is passed.

The relay fee is computed automatically. feeAmount is only needed to lock in an exact amount already returned by GET /get-fee.

Authorized by a normal mode session (secp256k1 request signature, bound to "POST /transfer") or an EIP-712 mode session with a per-transaction EIP-712 typed-data signature (primary type Transfer) on EVM/Tron, or an ed25519 plain-text signature on Solana.

Header parameters
x-hinkal-request-signaturestringOptional

Required for normal mode sessions: hex-encoded compact secp256k1 signature secp256k1_sign(SHA256(binding + "\n" + JSON.stringify(body))), where binding is "POST <routePath>" for this endpoint. Omit for EIP-712 mode sessions — include signature in the request body instead. See Authentication for the full signing scheme.

Body
sessionIdstring · uuidRequired
noncestring · uuidRequired
signaturestringOptional

EIP-712 or ed25519 signature (EIP-712 mode only)

chainIdintegerRequired
tokenAddressesstring[]Required
amountsstring[]Required
recipientAddressstringRequired

Recipient's recipientInfo from GET /recipient-info, or a plain public address (Ethereum on EVM/Tron, Solana on Solana).

feeTokenstringOptional

Token used to pay the relay fee. Required for EVM/Tron. On Solana, always set to tokenAddresses[0] by the server — any value passed is ignored.

feeAmountstringOptional

Optional — omit it and the server computes the fee automatically. Pass it only to lock in a fee amount already quoted from GET /get-fee.

Responses
200

Relayed transaction hash

application/json
post/transfer
POST /transfer HTTP/1.1
Host: api.hinkal.io
Content-Type: application/json
Accept: */*
Content-Length: 342

{
  "sessionId": "ffd74231-0672-48c7-bd82-9f72a803578b",
  "nonce": "682e143a-fefd-41b8-acd7-73529b15d8fe",
  "chainId": 10,
  "tokenAddresses": [
    "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"
  ],
  "amounts": [
    "10000000"
  ],
  "recipientAddress": "0x8e4a7f9c2b3d5a1e6f8c4b2d9a7e5f3c1b4d6a8e2f4c6b8a2d4f6c8e1b3d5a7",
  "feeToken": "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"
}
{
  "success": true,
  "txHash": "0x7c2a9f1e8b3d5c6a4f2e9d1b8c3f5a7e2d4b9f1c3a5e7d2b4f6a8c1e3d5b7f9",
  "nonce": "682e143a-fefd-41b8-acd7-73529b15d8fe"
}

Last updated