---
title: "Cancel Crypto Transaction"
method: POST
path: "/accounts/{account_id}/crypto/{transaction_id}/cancel"
tags: ["Transfers"]
---

# Cancel Crypto Transaction

`POST /accounts/{account_id}/crypto/{transaction_id}/cancel`

## Request

- Base URL: `https://api.meow.com/v1`
- URL: `https://api.meow.com/v1/accounts/{account_id}/crypto/{transaction_id}/cancel`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/meow/apis/meow-api/docs/accounts/:account_id/crypto/:transaction_id/cancel/post.ts> (a function with typed inputs; its response is checked against the schema)

Cancels an outgoing crypto transfer that is under review and has not been sent. Returns the transfer with its new status. A transfer that is already being sent cannot be canceled.

## Path parameters

- `account_id` string, required: The ID of the account.
- `transaction_id` string, uuid, required: The ID returned when you created the transfer.

## Headers

- `x-entity-id` string, uuid

## Response `200`

Successful Response

- GetCryptoTransactionResponse
  - `id` union, required: Identifier of the transaction. For an outbound transfer this is the id returned when you created it; for an inbound deposit it is the transaction id List Transactions reports, or the id the crypto_transfer webhook published before the deposit settled.
    - string
    - string, uuid
  - `amount` string, required: Size of the transaction, in USD. Always positive, in both directions.
  - `direction` 'inbound' | 'outbound', required
  - `status` 'pending' | 'pending_approval' | 'canceled' | 'processing' | 'error' | 'sent' | 'returned' | 'void', required
  - `destination_address` string, required: On-chain address the funds were sent to.
  - `destination_payment_rail` 'ethereum' | 'base' | 'solana' | 'arbitrum' | 'polygon' | 'optimism' | 'tron' | 'stellar' | 'avalanche_c_chain' | 'binance' | 'sui' | 'tempo' | 'xdc' | 'bitcoin' | 'ripple', required
  - `destination_tx_hash` string, nullable: On-chain hash of the transfer we sent. Set on outbound transactions once they settle.
  - `destination_address_nickname` string, nullable: Nickname of the contact that owns the destination address. `null` when the address is not attached to a contact, which is the usual case for inbound deposits.
  - `source_address` string, nullable: On-chain address the funds were sent from. Set on inbound deposits, so you can match a deposit to whoever sent it.
  - `source_tx_hash` string, nullable: On-chain hash of the deposit. Set on inbound deposits.
  - `metadata` object, nullable: The metadata attached when this object was created, unchanged. `null` when none was attached. Rarely, a `.created` webhook can be published before the create request finishes committing, and that one event reports `null`; every later event and every read of the object carries the metadata.

## Other responses

- `400`: The request could not be processed.
- `401`: Authentication failed.
- `403`: The API key is not authorized for this operation, or the user of a global API key is an admin or controller without approved KYC. The KYC case returns the message `KYC is required for controllers and admins.` until that user completes KYC in the Meow dashboard.
- `429`: Too many requests.

---

[API](https://skmtc.dev/meow/apis/meow-api.md) - [All operations](https://skmtc.dev/meow/apis/meow-api/llms.txt) - [OpenAPI document](https://skmtc.dev/meow/apis/meow-api/revisions/ea2d7e25b63b?raw)
