Cancel an order
POST /v0/orders/{orderId}/cancel · 1Click-compatible
POST/v0/orders/{orderId}/cancel
Needs Authorization: Bearer <accessToken> (or any X-API-Key). Returns HTTP 201 with the order in PENDING_CANCEL; it moves to CANCELED once the cancellation is processed. Cancelling a finished order returns 400 (below). Real response.
Requests asynchronous cancellation. Unspent input is refunded and successfully filled output is withdrawn. Errors. Branch on code, never on title or detail. New codes arrive without a major version, so treat an unrecognized code as the HTTP status alone. | Status | Codes | | --- | --- | | 400 | order-rejected | | 401 | authentication-required | | 404 | order-not-found | | 429 | rate-limit-exceeded | | 500 | internal-error | | 503 | service-unavailable | Tidepool: returns 201 with PENDING_CANCEL; the deposit is refunded, then the order becomes CANCELED.
Operation id: cancelOrder · Auth: optional (X-API-Key or Authorization: Bearer, any value)
Request
curl -X POST "https://www.usetidepool.tech/v0/orders/ord_30bcf13f028ef83ae6dd9a64/cancel" \
-H 'Authorization: Bearer <accessToken>'Responses
201 Cancellation requested.
{
"data": {
"type": "orders",
"id": "ord_30bcf13f028ef83ae6dd9a64",
"attributes": {
"orderType": "LIMIT",
"depositAddress": "b3e013f41cee40b33296f5e0185feae34c2f95059a05482e07cb610acd067322",
"depositMode": "SIMPLE",
"depositType": "INTENTS",
"fillStatus": "PENDING_CANCEL",
"payoutStatus": "NOT_STARTED",
"isPayoutStatusFinal": false,
"payouts": {
"withdrawal": null,
"allWithdrawals": [],
"refund": null
},
"depositedAmount": "0",
"depositedAmountFormatted": "0",
"baseAsset": "nep141:wnear.tidepool-sandbox.testnet",
"quoteAsset": "nep141:usdc.tidepool-sandbox.testnet",
"quantity": "1000000000000000000000000",
"swapView": {
"swapType": "EXACT_INPUT",
"originAsset": "nep141:wnear.tidepool-sandbox.testnet",
"destinationAsset": "nep141:usdc.tidepool-sandbox.testnet",
"amountIn": "1000000000000000000000000",
"minAmountOut": "3465000"
},
"side": "SELL",
"price": "3.5",
"appFees": [
{
"recipient": "fees.testnet",
"fee": 100
}
],
"recipient": "9cf39ad040a13205c3ab109a8566fd779394a548f76b1aed5107efcdfe6c7ceb",
"recipientType": "INTENTS",
"refundTo": "9cf39ad040a13205c3ab109a8566fd779394a548f76b1aed5107efcdfe6c7ceb",
"refundType": "INTENTS",
"estimatedWithdrawFee": "0",
"estimatedWithdrawFeeFormatted": "0",
"estimatedRefundFee": "0",
"estimatedRefundFeeFormatted": "0",
"confidentiality": "public",
"timeInForce": "GTC",
"deadline": "2026-11-20T00:00:00.000Z",
"createdAt": "2026-10-30T16:31:25.898Z",
"partialFills": []
},
"links": {
"self": "/v0/orders/ord_30bcf13f028ef83ae6dd9a64"
}
},
"meta": {
"correlationId": "8ce9e739-267c-4f3c-ba92-ede7496933ea",
"timestamp": "2026-10-30T16:31:33.517Z"
}
}| Field | Type | Required | Description |
|---|---|---|---|
data | object | yes | |
data.type | "orders" | yes | |
data.id | string | yes | Opaque resource identifier. Clients should treat IDs as opaque and not rely on the prefix or length. |
data.attributes | LimitOrderAttributes | yes | |
data.attributes.orderType | object | yes | Order type. |
data.attributes.depositAddress | string | yes | Deposit address for funding the order. |
data.attributes.depositMemo | string | Memo to include with the deposit, when required. | |
data.attributes.depositMode | object | yes | Deposit address mode. |
data.attributes.depositType | object | yes | Type of deposit address. |
data.attributes.fillStatus | object | yes | Current fill status. This does not show whether payout funds arrived. |
data.attributes.payoutStatus | object | yes | Aggregated progress of the main withdrawal and refund. |
data.attributes.isPayoutStatusFinal | boolean | yes | Whether payoutStatus is COMPLETED or FAILED. This field is derived and has no additional meaning. |
data.attributes.payouts | object | yes | Current withdrawal and refund legs. |
data.attributes.payouts.withdrawal | OrderPayoutInProgress \ | OrderPayoutCompleted \ | PayoutFailed |
Variant 1 of 3: OrderPayoutInProgress | |||
data.attributes.payouts.withdrawal.status | "IN_PROGRESS" | yes | |
Variant 2 of 3: OrderPayoutCompleted | |||
data.attributes.payouts.withdrawal.status | "COMPLETED" | yes | |
data.attributes.payouts.withdrawal.txHash | string | yes | Destination-chain transaction hash. |
Variant 3 of 3: PayoutFailed | |||
data.attributes.payouts.withdrawal.status | "FAILED" | yes | |
data.attributes.payouts.withdrawal.reason | string | Terminal failure reason. This payout leg is not retried. Not populated yet - reserved for a defined set of public reasons. | |
data.attributes.payouts.allWithdrawals | OrderPayoutInProgress \ | OrderPayoutCompleted \ | PayoutFailed[] |
Variant 1 of 3: OrderPayoutInProgress | |||
data.attributes.payouts.allWithdrawals[].[]status | "IN_PROGRESS" | yes | |
Variant 2 of 3: OrderPayoutCompleted | |||
data.attributes.payouts.allWithdrawals[].[]status | "COMPLETED" | yes | |
data.attributes.payouts.allWithdrawals[].[]txHash | string | yes | Destination-chain transaction hash. |
Variant 3 of 3: PayoutFailed | |||
data.attributes.payouts.allWithdrawals[].[]status | "FAILED" | yes | |
data.attributes.payouts.allWithdrawals[].[]reason | string | Terminal failure reason. This payout leg is not retried. Not populated yet - reserved for a defined set of public reasons. | |
data.attributes.payouts.refund | OrderPayoutInProgress \ | OrderPayoutCompleted \ | PayoutFailed |
Variant 1 of 3: OrderPayoutInProgress | |||
data.attributes.payouts.refund.status | "IN_PROGRESS" | yes | |
Variant 2 of 3: OrderPayoutCompleted | |||
data.attributes.payouts.refund.status | "COMPLETED" | yes | |
data.attributes.payouts.refund.txHash | string | yes | Destination-chain transaction hash. |
Variant 3 of 3: PayoutFailed | |||
data.attributes.payouts.refund.status | "FAILED" | yes | |
data.attributes.payouts.refund.reason | string | Terminal failure reason. This payout leg is not retried. Not populated yet - reserved for a defined set of public reasons. | |
data.attributes.depositedAmount | string | yes | Cumulative deposited input amount in the smallest unit of the base asset for SELL or the quote asset for BUY. |
data.attributes.depositedAmountFormatted | string | yes | Cumulative deposited input amount formatted using the input asset decimals. |
data.attributes.baseAsset | string | yes | ID of the base asset in the trading pair. |
data.attributes.quoteAsset | string | yes | ID of the quote asset used to price the base asset. |
data.attributes.quantity | string | yes | Base-asset order quantity in the asset smallest unit. A BUY targets this output; a SELL targets this input. |
data.attributes.swapView | LimitOrderExactInputSwapView \ | LimitOrderExactOutputSwapView | yes |
Variant 1 of 2: LimitOrderExactInputSwapView | |||
data.attributes.swapView.swapType | "EXACT_INPUT" | yes | |
data.attributes.swapView.originAsset | string | yes | |
data.attributes.swapView.destinationAsset | string | yes | |
data.attributes.swapView.amountIn | string | yes | |
data.attributes.swapView.minAmountOut | string | yes | |
Variant 2 of 2: LimitOrderExactOutputSwapView | |||
data.attributes.swapView.swapType | "EXACT_OUTPUT" | yes | |
data.attributes.swapView.originAsset | string | yes | |
data.attributes.swapView.destinationAsset | string | yes | |
data.attributes.swapView.maxAmountIn | string | yes | |
data.attributes.swapView.amountOut | string | yes | |
data.attributes.side | object | yes | Submitted order side. |
data.attributes.price | string | yes | Submitted human-unit limit price. |
data.attributes.appFees | AppFee[] | yes | Normalized application and protocol fees. |
data.attributes.appFees[].[]recipient | string | yes | Account ID within Intents to which this fee will be transferred |
data.attributes.appFees[].[]fee | number | yes | Fee for this recipient as part of amountIn in basis points (1/100th of a percent), e.g. 100 for 1% fee |
data.attributes.recipient | string | yes | Recipient address supplied when creating the order. |
data.attributes.recipientType | object | yes | Type of recipient address. |
data.attributes.refundTo | string | yes | Refund address supplied when creating the order. |
data.attributes.refundType | object | yes | Type of refund address. |
data.attributes.estimatedWithdrawFee | string | yes | Withdrawal-fee estimate captured at creation, in destination-asset smallest units. It covers one withdrawal. The fee charged for each withdrawal may differ. |
data.attributes.estimatedWithdrawFeeFormatted | string | yes | Withdrawal-fee estimate formatted using the destination asset decimals. |
data.attributes.estimatedRefundFee | string | yes | Refund-fee estimate captured at creation, in input-asset smallest units. The fee charged for the refund may differ. |
data.attributes.estimatedRefundFeeFormatted | string | yes | Refund-fee estimate formatted using the input asset decimals. |
data.attributes.confidentiality | object | yes | Confidentiality mode for this order. |
data.attributes.timeInForce | object | yes | Time in force for the order. |
data.attributes.deadline | string | yes | Timestamp in ISO format that identifies when the order can expire. |
data.attributes.createdAt | string | yes | Timestamp in ISO format that identifies when the order was created. |
data.attributes.partialFills | LimitOrderPartialFill[] | Successful fills. Fills that are in flight or failed are not reported. | |
data.attributes.partialFills[].[]id | string | yes | Public identifier for this fill attempt. |
data.attributes.partialFills[].[]amountIn | string | yes | Gross input allocated to the fill, in input-asset smallest units. |
data.attributes.partialFills[].[]amountOut | string | yes | Net output received for the fill, in output-asset smallest units. |
data.attributes.partialFills[].[]createdAt | string | yes | ISO 8601 creation timestamp. |
data.attributes.partialFills[].[]updatedAt | string | yes | ISO 8601 last-update timestamp. |
data.links | object | yes | |
data.links.self | string | yes | |
meta | JsonApiMeta | yes | |
meta.correlationId | string | yes | Unique identifier for request tracing and debugging. |
meta.timestamp | string | yes | Timestamp in ISO format when the response was generated. |
400 Order rejected
{
"errors": [
{
"status": "400",
"code": "order-rejected",
"title": "Order rejected",
"detail": "order is already CANCELED"
}
],
"meta": {
"correlationId": "d5d46511-e17f-4b95-b78f-93483fa7480c",
"timestamp": "2026-10-30T16:32:44.120Z"
}
}401 Authentication required
{
"errors": [
{
"status": "401",
"code": "authentication-required",
"title": "Authentication required",
"detail": "Send Authorization: Bearer <accessToken> (from /v0/auth/authenticate) or x-api-key"
}
],
"meta": {
"correlationId": "fea594fc-2409-45eb-aa08-72421258265a",
"timestamp": "2026-10-30T16:31:33.908Z"
}
}404 Order not found
{
"errors": [
{
"status": "404",
"code": "order-not-found",
"title": "Order not found",
"detail": "No order ord_nope"
}
],
"meta": {
"correlationId": "1e074bf6-cb0c-4568-b909-a569ffe2550d",
"timestamp": "2026-10-30T16:31:34.300Z"
}
}429 Rate limit exceeded
JSON:API error document. Not returned in testing.
500 Internal error
JSON:API error document, code: "internal-error". Not returned in testing.
503 Service unavailable
JSON:API error document. Not returned in testing.
Community-built · not affiliated with NEAR. Tidepool is community-built and not affiliated with NEAR, Defuse or 1Click. Testnet only; test tokens have no value. Built by @realchriswilder.