createOrder

abstract suspend fun createOrder(catalogItemId: String, gatewayId: GatewayId, idempotencyKey: String): CreatedOrder

POST /orders — price is resolved server-side from catalogItemId; the client never sets it.

idempotencyKey must be stable across retries of the SAME logical order attempt (generated once by the caller per order attempt) so a retried call dedups server-side instead of creating a second live order.