Overview
Dedicated private-send endpoints let you send funds to another address privately — the same token goes in and comes out. The request takes a singletoken, with no from/to pair.
Best For: Moving funds privately to a new address without changing assets, so there is no on-chain link between the source and destination.
Authentication
Full access uses the API key header (noBearer, no base64):
<apiKeyId> is the API key’s public id, not your partner id. See Authentication.
The quote endpoint also accepts the public partner-id header. Creating an order requires full API-key (or x402) access.
How It Works
1
Find a token
Find a token that supports private send (
hasSelfPrivate=true).2
Get a quote
Call
GET /v2/quotes/private-send with token and amount.3
Create the order
Call
POST /v2/exchanges/private-send with the quoteId and destination addressTo.4
Deposit and track
Deposit to
depositAddress before expires, then poll the order.Integration Guide
Step 1: Find a Token
Search for tokens that support private send by passinghasSelfPrivate=true. Note the token’s id.
Step 2: Get a Private Send Quote
CallGET /quotes/private-send with a single token and the amount to send.
amountOut, duration, min, and max before committing.
useXmr=true forces Monero as the bridge token. Omit it or send false to use another privacy token.amountOut will be slightly lower than the amount sent — network and exchange fees apply per hop even though the token is the same. Use the quoted amountOut when setting recipient expectations.Step 3: Create the Order
Pass thequoteId and destination address to POST /exchanges/private-send. Create the order within about a minute of quoting — a stale quoteId is rejected with 422, and the error message names the age limit.
fixed: true or requiresRefundAddress: true, also set refundAddress to a wallet you control.
Order Response
Step 4: Monitor Order Status
PollGET /orders/{houdiniId} to track progress, or subscribe via the WebSocket API for real-time updates:
Common Mistakes
- Passing a token that does not support private send — filter with
hasSelfPrivate=true - Using a
quoteIdfromGET /v2/quotesthat is not a private same-token send quote - Waiting too long after the quote — create the order while the
quoteIdis still valid
Next Steps
Private Swap
Private multi-hop routing into a different asset
Order Lifecycle
Understand all order statuses
Tokens & Networks
Token discovery and filtering, including
hasSelfPrivateWebSocket Order Updates
Real-time order status without polling