POST /cancel-order
This endpoint builds a cancellation transaction for an existing limit order. The returned payload must be signed and submitted to the blockchain by the caller to complete the cancellation.
TypeScript Types: Generate types for this API with a single command. See Type Generation.
API Reference: For detailed schema definitions and interactive testing, see the API Reference.
Request
Endpoint
POST /cancel-orderHeaders
Content-Type: application/json
x-api-key: YOUR_API_KEYBody Parameters
| Field | Type | Required | Description |
|---|---|---|---|
orderId | string | Yes | The ID of the limit order to cancel |
chain | Chain | Yes | The chain where the order was placed |
Example Request
import type { components } from './m0-swap'; // From type generation
type CancelOrderResponse = components['schemas']['CancelOrderResponse'];
const response = await fetch('https://gateway.m0.xyz/v1/orchestration/cancel-order', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': YOUR_API_KEY,
},
body: JSON.stringify({
orderId: '0xabc123...', // The limit order ID
chain: 'Ethereum',
}),
});
if (!response.ok) {
const error = await response.text();
throw new Error(`Cancel order failed: ${error}`);
}
const result: CancelOrderResponse = await response.json();Response
Success Response (200)
Returns a CancelOrderResponse object containing the transaction payload to submit on-chain to complete the
cancellation.
import type { components } from './m0-swap';
type CancelOrderResponse = components['schemas']['CancelOrderResponse'];Response Fields
| Field | Type | Description |
|---|---|---|
orderId | string | The ID of the order being cancelled |
chain | Chain | The chain where the cancellation transaction must be sent |
payload | TransactionPayload | The signed transaction data to submit to cancel the order |
The payload field follows the same TransactionPayload structure as quote payloads — either an EvmPayload or
SvmPayload depending on the chain. See the Quote docs for payload execution examples.
Error Responses
| Status | Description |
|---|---|
404 | Order not found — the orderId does not exist on the specified chain |
409 | Order cannot be cancelled — it may already be filled, expired, or cancelled |
500 | Internal server error |
Example Response
{
"orderId": "0xabc123...",
"chain": "Ethereum",
"payload": {
"type": "evm",
"chain": "Ethereum",
"chainId": 1,
"to": "0x1234567890abcdef...",
"data": "0xabcdef...",
"value": "0"
}
}Executing the Cancellation
Once you have the response, submit the payload to the blockchain to complete the cancellation:
import { createWalletClient, http } from 'viem';
import { mainnet } from 'viem/chains';
import type { components } from './m0-swap';
type EvmPayload = components['schemas']['EvmPayload'];
async function executeCancelOrder(payload: EvmPayload, account: `0x${string}`) {
const client = createWalletClient({
chain: mainnet,
transport: http(),
account,
});
const hash = await client.sendTransaction({
to: payload.to as `0x${string}`,
data: payload.data as `0x${string}`,
value: BigInt(payload.value),
});
return hash;
}Notes
- Only the original order creator can cancel a limit order
- A
409response means the order is in a terminal state (filled, expired, or already cancelled) and no action is needed - The cancellation is not final until the returned transaction payload is submitted and confirmed on-chain

