POST /orders/{chain}/{orderId}/cancel
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 /orders/{chain}/{orderId}/cancelHeaders
x-api-key: YOUR_API_KEYPath Parameters
| Field | Type | Required | Description |
|---|---|---|---|
chain | Chain | Yes | The chain where the order was placed |
orderId | string | Yes | The ID of the limit order to cancel |
Example Request
import type { components } from './m0-swap'; // From type generation
type TransactionPayload = components['schemas']['TransactionPayload'];
const chain = 'Ethereum';
const orderId = '0xabc123...';
const response = await fetch(`https://gateway.m0.xyz/v1/orchestration/orders/${chain}/${orderId}/cancel`, {
method: 'POST',
headers: {
'x-api-key': YOUR_API_KEY,
},
});
if (!response.ok) {
const error = await response.text();
throw new Error(`Cancel order failed: ${error}`);
}
const payload: TransactionPayload = await response.json();Response
Success Response (200)
Returns a TransactionPayload — the transaction data to submit on-chain to complete the cancellation.
import type { components } from './m0-swap';
type TransactionPayload = components['schemas']['TransactionPayload'];The payload is either an EvmPayload or SvmPayload depending on the chain, discriminated by the type field. See
the Quote docs for payload execution examples.
Error Responses
| Status | Description |
|---|---|
400 | Invalid chain or request |
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
{
"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

