Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

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}/cancel

Headers

x-api-key: YOUR_API_KEY

Path Parameters

FieldTypeRequiredDescription
chainChainYesThe chain where the order was placed
orderIdstringYesThe 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

StatusDescription
400Invalid chain or request
404Order not found — the orderId does not exist on the specified chain
409Order cannot be cancelled — it may already be filled, expired, or cancelled
500Internal 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 409 response 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