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.