Cancel Recurring Order
Murphy component to cancel Jupiter Recurring DCA Orders on Solana mainnet
Cancel Recurring Order
Cancel Recurring Order
Please connect your wallet to cancel recurring orders.
Installation
Install dependencies
pnpm add @solana/web3.js @solana/wallet-adapter-react sonner
Add Wallet Provider Make sure you have added the Wallet Provider to your application. If not, follow the steps in the Connect Wallet Button guide first.
Add CancelRecurringOrder
pnpm dlx shadcn@canary add https://www.murphyai.dev/r/CancelRecurringOrder.json
Basic Usage
import { CancelRecurringOrder } from "@/components/ui/murphy/Jupiter-Recurring/CancelRecurringOrder";
export default function MyPage() {
return (
<div>
<h1 className="text-xl font-bold mb-2">Cancel Recurring Orders</h1>
<CancelRecurringOrder />
</div>
);
}
Features
- Real-time cancellation: Cancel recurring DCA orders directly on Solana mainnet
- Two-step process: Get cancellation transaction from Jupiter API, then execute it
- Wallet integration: Requires connected wallet with signing capability
- Type selection: Support for both time-based and price-based recurring orders
- Safety warnings: Clear warning about permanent cancellation
- Result feedback: Success/error messages with transaction details
- Murphy UI: Consistent design with proper loading states and alerts
- Fully on-chain: No test/fake data, all real Solana mainnet transactions
How It Works
- Get Order ID: User enters the order ID they want to cancel
- Select Type: Choose between time-based or price-based recurring order
- API Call: Component calls Jupiter's
/cancelOrder
endpoint to get transaction - Execute: Component calls Jupiter's
/execute
endpoint to submit transaction - Result: User receives confirmation with transaction details
Props
Name | Type | Default | Description |
---|---|---|---|
className | string | undefined | Additional CSS classes |
Types
export type RecurringType = "time" | "price";
interface CancelOrderResponse {
requestId: string;
transaction: string;
}
interface CancelOrderError {
code: number;
error: string;
status: string;
}
API Endpoints
- Cancel Order:
POST https://lite-api.jup.ag/recurring/v1/cancelOrder
- Execute Transaction:
POST https://lite-api.jup.ag/recurring/v1/execute
Request Body
{
"order": "4DWzP4TdTsuwvYMaMWrRqzya4UTFKFoVjfUWNWh8zhzd",
"user": "wallet_public_key",
"recurringType": "time"
}
Response
Success Response:
{
"requestId": "36779346-ae51-41e9-97ce-8613c8c50553",
"transaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAgORL7cu4ZNuxh1wI9W7GVURyr3A06dH348HDpIQzcAJ4oZOZHXAukWalAX/odOiV55UZa1ePBg8d2tRKQyqCjV6C/H8IQcrfZR4QeOJFykenP3QJznc6vNpqe2D57HTD7Gd1R4MYi595YUO8ViNwpWb17+Q9DxkVcz5fWpSqjtDyiji2RfCl7yoUfzkV42QPexQNFjBK5/+pJhV8QuWShN6r9vLZM5XJNS670dgAgf7wC+wCLLIFWHgjgWx32LJMnJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAabiFf+q4GE+2h/Y0YYwDXaxDncGus7VZig8AAAAAABBt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKmMlyWPTiSJ8bs9ECkUjg2DC1oTmdr/EIQEjnvY2+n4WbB1qAZjecpv43A3/wwo1VSm5NY22ehRjP5uuuk/Ujb+tSfUXWQOPsFfYV1bDiOlSpa4PwuCC/cGNfJDSsZAzATG+nrzvtutOj1l82qryXQxsbvkwtL24OR8pgIDRS9dYVCj/auTzJLgPke1v9c3puAy81rBYgsabmuLUTEQsZyVAwcABQL9WQEABwAJA0ANAwAAAAAADA0AAg0IAQQDBQYJCgsMCBYHIWKotyLz"
}
Error Response:
{
"code": 400,
"error": "Failed to deserialize account data: failed to fill whole buffer",
"status": "Bad Request"
}