---
title: OOTB - Financial Services - Transfer Approval via Email - Subflow
description: Learn about the OOTB - Financial Services - Transfer Approval via Email - Subflow flow, including its purpose, structure, inputs, outputs, and variables.
component: pingone-solutions
page_id: pingone-solutions:financial-services:flow-reference/financial-services-transfer-approval-via-email
canonical_url: https://docs.pingidentity.com/pingone-solutions/financial-services/flow-reference/financial-services-transfer-approval-via-email.html
revdate: July 1, 2025
section_ids:
  purpose: Purpose
  structure: Structure
  input-schema: Input schema
  output-schema: Output schema
  variables-and-parameters: Variables and parameters
---

# OOTB - Financial Services - Transfer Approval via Email - Subflow

The **OOTB - Financial Services - Transfer Approval via Email - Subflow** uses a magic link email to get user verification for a transaction.

## Purpose

The **OOTB - Financial Services - Transfer Approval via Email - Subflow** sends a magic link email to the user's email address. When the user follows the magic link to approve the transaction, the flow passes this approval to the parent flow.

## Structure

This flow is divided into sections using teleport nodes:

* **Create Challenge And Send Transfer Approval Email**

  Uses a PingOne node to verify that the user exists. The flow then simultaneously uses a flow conductor to start an out of band process and progresses to the **Challenge Acceptance By The User** section.

  A PingOne notifications node sends a magic link email to the user, and an HTML node displays a polling screen for the user. The flow then progresses to the **Display Polling And Check For Challenge Status** section.

* **Challenge Acceptance By The User**

  Function nodes check the challenge status and check whether the challenge has expired. If the challenge has not expired, a function node approves the challenge and a success message displays.

* **Display Polling And Check For Challenge Status**

  A function node proceeds if the user does not click **Cancel**.

  If the user doesn't click **Cancel**, a function node checks the challenge status. If the status is approved, the flow progresses to the **Return Success** section. If the status isn't approved, the flow progresses to the **Challenge Expiration** section.

* **Challenge Expiration**

  A function node checks whether the challenge was denied. If so, an error message displays. If the user clicks **Next**, the flow progresses to the **Return Success** section.

* **Return Success**

  Sends a success JSON response, indicating that the flow has completed successfully.

* **Return Error**

  Uses a function node to enrich the error details, then sends an error JSON response indicating that the flow completed unsuccessfully.

## Input schema

This flow has the following inputs:

| Input name    | Required | Description                                                                                                                                                          |
| ------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `p1UserId`    | Yes      | The current user's PingOne user ID.                                                                                                                                  |
| `companyLogo` | No       | The company logo to display in user-facing HTML pages.                                                                                                               |
| `moneyTo`     | Yes      | The destination account for the transfer.                                                                                                                            |
| `amount`      | Yes      | The amount of money to be transferred.                                                                                                                               |
| `moneyFrom`   | Yes      | The source account for the transfer.                                                                                                                                 |
| `flowType`    | Yes      | The type of process that launched this subflow. `Transfer` is the value used when this flow is invoked by the **OOTB - Financial Services - Make Transfer Subflow**. |

## Output schema

This flow has the following outputs:

| Output Name     | Description                                   |
| --------------- | --------------------------------------------- |
| `subflowResult` | The result status of the flow.                |
| `errorMessage`  | The error message to pass to the parent flow. |
| `errorDetails`  | The details of the error that occurred.       |

## Variables and parameters

This flow uses the following variable or parameter values:

| Parameter name | Description                         |
| -------------- | ----------------------------------- |
| `p1UserId`     | The current user's PingOne user ID. |
