Failed Standing Order Webhooks

In the case that there is a failed step in the sequence of a standing order (i.e. at the swap or withdrawal step), the following webhooks notify you of the failed step and a reason if available. In most cases you might simply have to call the "Resume Standing Order" API or the user may be ineligible for a withdrawal due to their KYC tier.


  1. Standing order failed during on-chain withdrawal -
{
  "uid": "99fc021c-7d1a-4153-8bf2-e424bba0f786",
  "type": "STANDING_ORDER_FAILED",
  "sourceSyncedOwnerId": "b6510927-8e7f-4cdb-95c5-27157318b3f1",
  "standingOrderId": "20d56f38-0dfc-44d0-a7b5-58b13cc72923",
  "standingOrderDirection": "FIAT_TO_CRYPTO",
  "standingOrderSpanId": "285621ee-e02a-485d-a39f-988fa39dd8e8",
  "failureType": "ON_CHAIN_WITHDRAWAL_FAILED",
  "ts": 1756992255311
}

  1. Standing order failed during SEPA withdrawal -
{
  "uid": "99225580-59fb-47c2-a87c-6e2aa48d6150",
  "type": "STANDING_ORDER_FAILED",
  "sourceSyncedOwnerId": "b6510927-8e7f-4cdb-95c5-27157318b3f1",
  "standingOrderId": "7fbd5c59-8cd3-48a3-9937-a1a948dac9d1",
  "standingOrderDirection": "CRYPTO_TO_FIAT",
  "standingOrderSpanId": "1f486cbc-57c8-4ae4-8a0c-9599d9a4953c",
  "failureType": "SEPA_WITHDRAWAL_FAILED",
  "ts": 1756992421918
}

  1. Standing order failed due to user limit exceeded -
{
  "uid": "2440be48-0005-497c-801d-cf6dfe814084",
  "type": "STANDING_ORDER_FAILED",
  "sourceSyncedOwnerId": "b6510927-8e7f-4cdb-95c5-27157318b3f1",
  "standingOrderId": "20d56f38-0dfc-44d0-a7b5-58b13cc72923",
  "standingOrderSpanId": "43c93d99-afa0-47a0-a520-d9d2567ce9f1",
  "standingOrderDirection": "FIAT_TO_CRYPTO",
  "failureType": "USER_LIMIT_EXCEEDED",
  "ts": 1756990900913
}

  1. Standing order failed due to proposed rate validation failure -
{
  "uid": "7d1d310f-577d-4374-b6cf-72e9c5b4f923",
  "type": "STANDING_ORDER_FAILED",
  "sourceSyncedOwnerId": "b6510927-8e7f-4cdb-95c5-27157318b3f1",
  "standingOrderId": "8dd01aa2-26a4-4df4-b2e5-65dfd20178ed",
  "standingOrderSpanId": "2c1f1cdc-9f99-47c8-bf8e-9c176f6d9b1f",
  "standingOrderDirection": "CRYPTO_TO_FIAT",
  "failureType": "PROPOSED_RATE_VALIDATION_FAILED",
  "ts": 1757580026952
}

  1. Blocked by Travel Rule

For FIAT_TO_CRYPTO standing orders, Travel Rule is checked after the swap and before the on-chain withdrawal.

If the whitelisted payout address is not Travel Rule–compliant (e.g. undeclared address, pending wallet verification, or missing VASP user info), the flow stops. You still get the pay-in and swap webhooks; payout webhooks are not sent.

Instead you receive:

{
  "type": "STANDING_ORDER_FAILED",
  "failureType": "BLOCKED_BY_TRAVEL_RULE",
  "standingOrderId": "9f00b87f-5a4d-421e-a8eb-fbc7041ccc8e",
  "standingOrderSpanId": "71b8e49d-af3e-47f8-9f73-748f49ffcefb",
  "standingOrderDirection": "FIAT_TO_CRYPTO",
  "sourceSyncedOwnerId": "9957bc9f-a9e8-4edf-ad16-a9f241f961ce",
  "ts": 1757681065000
}

Funds: The swap completes; crypto stays in the user's wallet.

What to do: Notify the user, declare the counterparty (and complete verification if required)

Tip: Declare and verify the whitelisted address before creating the standing order to avoid this failure.

Refer: https://docs.striga.com/reference/travel-rule#for-standing-orders