place_perp_order
Open a leveraged perp position on the best/selected venue (non-custodial).
side is "long" | "short". market e.g. SOL-PERP; size_usd is notional USD. venue optional -- defaults to the configured primary (Jupiter Perps), with health failover to the fallback for new orders. Returns an UNSIGNED tx (Tier A) or a signing payload (Tier B) for your wallet to sign + broadcast, plus venue_name / custody_tier / settlement_token. Tier B (venue-custodied) venues require acknowledge_tier_b=true after reviewing custody_disclosure. Fee charged on size_usd notional past the daily free tier (x402).
jurisdiction: your ISO-3166-1 alpha-2
country code, self-declared -- perps are geo-gated (no US persons, unknown
jurisdiction DENIED). Declare once here (or via
declare_jurisdiction/trade_equity) and it is remembered 90 days.
Workflow: EXECUTE step (leveraged directional leg) -- after get_venue_health / get_venue_risk_score clear the venue and get_risk_assessment caps the size. Monitor via perp_positions. See get_trading_workflow.
idempotency_key (optional): a client-generated UUID.
Retrying with the same key + same args replays the original result instead
of re-opening the order. Reuse the SAME key across the build call and its
signed_transaction completion call -- the two legs
dedupe independently, so this never raises IDEMPOTENCY_CONFLICT; a NEW key
means a genuinely new order.
signed_transaction / verify (two-phase execution):
re-call this tool with the SIGNED payload and Crank relays it by custody
tier -- Tier A to Solana RPC, then awaits on-chain confirmation and
re-reads the position on the executing venue; Tier B to the venue's own
submit endpoint, which returns a venue order id (reported as
venue-acknowledged, since it is not an on-chain signature). Gate follow-on
decisions on verification.confirmed, never on tx_signature alone.
venue_action (optional, completion leg only): the value
the BUILD leg recorded on extra['venue_action'] -- pass it back
alongside signed_transaction so Crank relays the bytes under the venue
action the venue itself named (e.g. Jupiter's create-limit-order, for a
keeper-co-signed build that can only land via the venue's execute
endpoint). Omit it and Crank infers the route from the signed bytes' own
message header instead, which is correct but less authoritative.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | ||
| side | Yes | ||
| venue | No | ||
| market | Yes | ||
| verify | No | ||
| leverage | Yes | ||
| size_usd | Yes | ||
| caller_id | No | ||
| order_type | No | market | |
| limit_price | No | ||
| jurisdiction | No | ||
| pay_in_crank | No | ||
| venue_action | No | ||
| payment_header | No | ||
| wallet_address | Yes | ||
| idempotency_key | No | ||
| stop_loss_price | No | ||
| take_profit_price | No | ||
| acknowledge_tier_b | No | ||
| signed_transaction | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||