---
title: "Create Standing Order"
method: POST
path: "/create"
tags: ["Consumer"]
---

# Create Standing Order

`POST /create`

Create a standing order that takes in a user ID, a source account ID and a destination IBAN or blockchain address container. This will send an OTP to the user after all checks pass, to be entered into the "Confirm Standing Order" API, after which, any funds deposited into the users' source account are automatically converted into the currency of the destination container and sent. If a single EUR account is denominated as the source for a standing order, any EUR deposits arriving into that account ID will be converted into the currency denominated in the whitelisted address and paid out with the then prevailing network fees. If a single BTC account is denominated as the source for instance, using the "Lightning Network" APIs, you can even specify a "proposedRate" and a FOK (Fill or Kill) boolean to honor a specific rate for your flow of off-ramps from BTC to EUR.

**SCA-enabled applications:** accepts a `verificationMethod` field (`sms`, `totp`, or `passkey`). All three factors are accepted for standing-order setup. Under SCA-enabled apps, the destination must already be a Trusted Beneficiary when the debit side is regulated: USDC-destined orders require a trusted address (`64009`); CRYPTO_TO_FIAT orders require a trusted IBAN (`64011`). When using `passkey`, run `PASSKEY_APPROVAL_START` before calling `/standing-orders/confirm`.

## Request body

- StandingOrderCreateRequest
  - `userId` string, uuid, required — Unique ID of the user for whom a standing order is to be created
  - `whitelistedAddressId` string, uuid — One of Striga's supported crypto currencies for which this standing order is to be paid out in (REQUIRED if source account is a EUR account, unless `action` is `SWAP_ONLY` and `destinationCurrency` is provided instead)
  - `whitelistedIbanId` string, uuid — ID of a whitelisted destination IBAN to which this standing order is to be paid out (REQUIRED if source account is not a EUR account)
  - `accountId` string, required — The account of the user for which deposits are to be monitored and paid out as part of this standing order
  - `fixedFee` string — The fixed fee in cents for the standing order - This overrides your default fee config and can be a value <= your legally approved value (optional)
  - `percentFeeBps` string — The percentage fee in basis points to be used for the standing order - This overrides your default fee config and can be a value <= your legally approved value (optional)
  - `verificationMethod` 'sms' | 'totp' | 'passkey' — SCA factor to issue the setup challenge against. Defaults to `sms` when omitted. All three factors are accepted. Under SCA-enabled apps, the destination must still be a Trusted Beneficiary when the debit side is regulated — USDC-destined orders require a trusted address (`64009`); CRYPTO_TO_FIAT orders require a trusted IBAN (`64011`). For `passkey`, run PASSKEY_APPROVAL_START before calling `/standing-orders/confirm`. Honoured only when the application has scaEnabled=true; ignored otherwise.
  - `action` 'SWAP_ONLY' | 'SWAP_AND_WITHDRAW' — Whether the standing order should perform a swap only or swap and withdraw on each execution. `SWAP_AND_WITHDRAW` (default) preserves the existing behavior. `SWAP_ONLY` swaps the deposit into the destination currency in the same wallet and stops — no external payout. When `SWAP_ONLY`, `whitelistedAddressId` / `whitelistedIbanId` are not required and trusted-beneficiary / travel-rule checks are skipped because no external send occurs.
  - `destinationCurrency` string — Destination currency to swap into, honoured only for `SWAP_ONLY` (ignored for `SWAP_AND_WITHDRAW`). When the source account is EUR, this is an alternative to `whitelistedAddressId` for choosing which crypto the EUR is swapped into — provide one or the other. When the source account is crypto, this selects the in-wallet swap destination and must be `EUR` or `USDC`; any `whitelistedAddressId` is ignored. The resulting source→destination pair must be a supported trading pair.

## Response `201`

success

- StandingOrderCreateResponse
  - `challengeId` string, uuid, required — Unique challenge ID to be used when confirming the standing order via OTP
  - `dateExpires` string, date-time, required — Date at which this challenge ID expires. If this expires, please create a new standing order. Standing orders are not persisted in storage unless confirmed.
  - `verificationMethod` 'sms' | 'totp' | 'passkey' — SCA factor that the standing-order challenge is bound to (echoes the request, defaults to sms).

## Other responses

- `400` — Bad Request. The request was unacceptable, often due to missing a required parameter.
- `401` — Invalid authentication header
- `500` — Unexpected server error.

---

[API](https://skmtc.net/striga/apis/striga-v1.md) · [All operations](https://skmtc.net/striga/apis/striga-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/striga/striga-v1/revisions/63e57aa7df45/schema)
