diff --git a/src/components/UploadFile.tsx b/src/components/UploadFile.tsx
index 5dff344a5877..f434b08d3800 100644
--- a/src/components/UploadFile.tsx
+++ b/src/components/UploadFile.tsx
@@ -69,7 +69,9 @@ function UploadFile({
     const theme = useTheme();
 
     const handleFileUpload = (files: FileObject[]) => {
-        const totalSize = files.reduce((sum, file) => sum + (file.size ?? 0), 0);
+        const resultedFiles = [...uploadedFiles, ...files];
+
+        const totalSize = resultedFiles.reduce((sum, file) => sum + (file.size ?? 0), 0);
 
         if (totalFilesSizeLimit) {
             if (totalSize > totalFilesSizeLimit) {
@@ -78,7 +80,7 @@ function UploadFile({
             }
         }
 
-        if (fileLimit && files.length > 0 && files.length > fileLimit) {
+        if (fileLimit && resultedFiles.length > 0 && resultedFiles.length > fileLimit) {
             setError(translate('attachmentPicker.tooManyFiles', {fileLimit}));
             return;
         }
@@ -98,6 +100,7 @@ function UploadFile({
 
         onInputChange(newFilesToUpload);
         onUpload(newFilesToUpload);
+        setError('');
     };
 
     return (
@@ -123,7 +126,7 @@ function UploadFile({
             {uploadedFiles.map((file) => (
                 <View
                     style={[styles.flexRow, styles.alignItemsCenter, styles.justifyContentCenter, styles.border, styles.p5, styles.mt3]}
-                    key={file.uri}
+                    key={file.name}
                 >
                     <Icon
                         src={Expensicons.Paperclip}
@@ -131,13 +134,13 @@ function UploadFile({
                         medium
                     />
                     <Text
-                        style={[styles.ml2, styles.mr2, styles.textBold, styles.breakWord, styles.w100]}
+                        style={[styles.ml2, styles.mr2, styles.textBold, styles.breakWord, styles.w100, styles.flexShrink1]}
                         numberOfLines={2}
                     >
                         {file.name}
                     </Text>
                     <PressableWithFeedback
-                        onPress={() => onRemove(file?.uri ?? '')}
+                        onPress={() => onRemove(file?.name ?? '')}
                         role={CONST.ROLE.BUTTON}
                         accessibilityLabel={translate('common.remove')}
                     >
@@ -151,7 +154,7 @@ function UploadFile({
             ))}
             {errorText !== '' && (
                 <DotIndicatorMessage
-                    textStyles={[styles.formError]}
+                    style={[styles.formError, styles.mt3]}
                     type="error"
                     messages={{errorText}}
                 />
diff --git a/src/languages/en.ts b/src/languages/en.ts
index 7f05ea436837..a16cd5c5857c 100755
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -83,6 +83,7 @@ import type {
     InvalidPropertyParams,
     InvalidValueParams,
     IssueVirtualCardParams,
+    LastFourDigitsParams,
     LastSyncAccountingParams,
     LastSyncDateParams,
     LocalTimeParams,
@@ -2288,6 +2289,16 @@ const translations = {
         findCountry: 'Find country',
         selectCountry: 'Select country',
     },
+    bankInfoStep: {
+        whatAreYour: 'What are your business bank account details?',
+        letsDoubleCheck: 'Let’s double check that everything looks fine.',
+        thisBankAccount: 'This bank account will be used for business payments on your workspace',
+        accountNumber: 'Account number',
+        bankStatement: 'Bank statement',
+        chooseFile: 'Choose file',
+        uploadYourLatest: 'Upload your latest statement',
+        pleaseUpload: ({lastFourDigits}: LastFourDigitsParams) => `Please upload the most recent monthly statement for your business bank account ending in ${lastFourDigits}.`,
+    },
     signerInfoStep: {
         signerInfo: 'Signer info',
     },
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 92ffd8728d97..4b8de4a13dc7 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -81,6 +81,7 @@ import type {
     InvalidPropertyParams,
     InvalidValueParams,
     IssueVirtualCardParams,
+    LastFourDigitsParams,
     LastSyncAccountingParams,
     LastSyncDateParams,
     LocalTimeParams,
@@ -2311,6 +2312,16 @@ const translations = {
         findCountry: 'Encontrar país',
         selectCountry: 'Seleccione su país',
     },
+    bankInfoStep: {
+        whatAreYour: '¿Cuáles son los detalles de tu cuenta bancaria comercial?',
+        letsDoubleCheck: 'Verifiquemos que todo esté bien.',
+        thisBankAccount: 'Esta cuenta bancaria se utilizará para pagos comerciales en tu espacio de trabajo.',
+        accountNumber: 'Número de cuenta',
+        bankStatement: 'Extracto bancario',
+        chooseFile: 'Elegir archivo',
+        uploadYourLatest: '¿Cuáles son los detalles de tu cuenta bancaria comercial?',
+        pleaseUpload: ({lastFourDigits}: LastFourDigitsParams) => `Por favor suba el estado de cuenta mensual más reciente de tu cuenta bancaria comercial que termina en ${lastFourDigits}.`,
+    },
     signerInfoStep: {
         signerInfo: 'Información del firmante',
     },
diff --git a/src/languages/params.ts b/src/languages/params.ts
index 2d60c13c4dd0..7574fe96bd60 100644
--- a/src/languages/params.ts
+++ b/src/languages/params.ts
@@ -543,6 +543,10 @@ type FileLimitParams = {
     fileLimit: number;
 };
 
+type LastFourDigitsParams = {
+    lastFourDigits: string;
+};
+
 type CompanyCardBankName = {
     bankName: string;
 };
@@ -641,6 +645,7 @@ export type {
     HeldRequestParams,
     InstantSummaryParams,
     IssueVirtualCardParams,
+    LastFourDigitsParams,
     LocalTimeParams,
     LogSizeParams,
     LoggedInAsParams,
diff --git a/src/libs/actions/BankAccounts.ts b/src/libs/actions/BankAccounts.ts
index 6679a6e4b9ea..bac1dba9ec71 100644
--- a/src/libs/actions/BankAccounts.ts
+++ b/src/libs/actions/BankAccounts.ts
@@ -343,6 +343,163 @@ function validateBankAccount(bankAccountID: number, validateCode: string, policy
     API.write(WRITE_COMMANDS.VALIDATE_BANK_ACCOUNT_WITH_TRANSACTIONS, parameters, onyxData);
 }
 
+function getCorpayBankAccountFields(country: string, currency: string) {
+    // TODO - Use parameters when API is ready
+    // eslint-disable-next-line @typescript-eslint/no-unused-vars
+    const parameters = {
+        countryISO: country,
+        currency,
+        isWithdrawal: true,
+        isBusinessBankAccount: true,
+    };
+
+    // return API.read(READ_COMMANDS.GET_CORPAY_BANK_ACCOUNT_FIELDS, parameters);
+    return {
+        bankCountry: 'AU',
+        bankCurrency: 'AUD',
+        classification: 'Business',
+        destinationCountry: 'AU',
+        formFields: [
+            {
+                errorMessage: 'Swift must be less than 12 characters',
+                id: 'swiftBicCode',
+                isRequired: false,
+                isRequiredInValueSet: true,
+                label: 'Swift Code',
+                regEx: '^.{0,12}$',
+                validationRules: [
+                    {
+                        errorMessage: 'Swift must be less than 12 characters',
+                        regEx: '^.{0,12}$',
+                    },
+                    {
+                        errorMessage: 'The following characters are not allowed: <,>, "',
+                        regEx: '^[^<>\\x22]*$',
+                    },
+                ],
+            },
+            {
+                errorMessage: 'Beneficiary Bank Name must be less than 250 characters',
+                id: 'bankName',
+                isRequired: true,
+                isRequiredInValueSet: true,
+                label: 'Bank Name',
+                regEx: '^.{0,250}$',
+                validationRules: [
+                    {
+                        errorMessage: 'Beneficiary Bank Name must be less than 250 characters',
+                        regEx: '^.{0,250}$',
+                    },
+                    {
+                        errorMessage: 'The following characters are not allowed: <,>, "',
+                        regEx: '^[^<>\\x22]*$',
+                    },
+                ],
+            },
+            {
+                errorMessage: 'City must be less than 100 characters',
+                id: 'bankCity',
+                isRequired: true,
+                isRequiredInValueSet: true,
+                label: 'Bank City',
+                regEx: '^.{0,100}$',
+                validationRules: [
+                    {
+                        errorMessage: 'City must be less than 100 characters',
+                        regEx: '^.{0,100}$',
+                    },
+                    {
+                        errorMessage: 'The following characters are not allowed: <,>, "',
+                        regEx: '^[^<>\\x22]*$',
+                    },
+                ],
+            },
+            {
+                errorMessage: 'Bank Address Line 1 must be less than 1000 characters',
+                id: 'bankAddressLine1',
+                isRequired: true,
+                isRequiredInValueSet: true,
+                label: 'Bank Address',
+                regEx: '^.{0,1000}$',
+                validationRules: [
+                    {
+                        errorMessage: 'Bank Address Line 1 must be less than 1000 characters',
+                        regEx: '^.{0,1000}$',
+                    },
+                    {
+                        errorMessage: 'The following characters are not allowed: <,>, "',
+                        regEx: '^[^<>\\x22]*$',
+                    },
+                ],
+            },
+            {
+                detailedRule: [
+                    {
+                        isRequired: true,
+                        value: [
+                            {
+                                errorMessage: 'Beneficiary Account Number is invalid. Value should be 1 to 50 characters long.',
+                                regEx: '^.{1,50}$',
+                                ruleDescription: '1 to 50 characters',
+                            },
+                        ],
+                    },
+                ],
+                errorMessage: 'Beneficiary Account Number is invalid. Value should be 1 to 50 characters long.',
+                id: 'accountNumber',
+                isRequired: true,
+                isRequiredInValueSet: true,
+                label: 'Account Number (iACH)',
+                regEx: '^.{1,50}$',
+                validationRules: [
+                    {
+                        errorMessage: 'Beneficiary Account Number is invalid. Value should be 1 to 50 characters long.',
+                        regEx: '^.{1,50}$',
+                        ruleDescription: '1 to 50 characters',
+                    },
+                    {
+                        errorMessage: 'The following characters are not allowed: <,>, "',
+                        regEx: '^[^<>\\x22]*$',
+                    },
+                ],
+            },
+            {
+                detailedRule: [
+                    {
+                        isRequired: true,
+                        value: [
+                            {
+                                errorMessage: 'BSB Number is invalid. Value should be exactly 6 digits long.',
+                                regEx: '^[0-9]{6}$',
+                                ruleDescription: 'Exactly 6 digits',
+                            },
+                        ],
+                    },
+                ],
+                errorMessage: 'BSB Number is invalid. Value should be exactly 6 digits long.',
+                id: 'routingCode',
+                isRequired: true,
+                isRequiredInValueSet: true,
+                label: 'BSB Number',
+                regEx: '^[0-9]{6}$',
+                validationRules: [
+                    {
+                        errorMessage: 'BSB Number is invalid. Value should be exactly 6 digits long.',
+                        regEx: '^[0-9]{6}$',
+                        ruleDescription: 'Exactly 6 digits',
+                    },
+                    {
+                        errorMessage: 'The following characters are not allowed: <,>, "',
+                        regEx: '^[^<>\\x22]*$',
+                    },
+                ],
+            },
+        ],
+        paymentMethods: ['E'],
+        preferredMethod: 'E',
+    };
+}
+
 function clearReimbursementAccount() {
     Onyx.set(ONYXKEYS.REIMBURSEMENT_ACCOUNT, null);
 }
@@ -572,6 +729,7 @@ export {
     updateAddPersonalBankAccountDraft,
     clearPersonalBankAccountSetupType,
     validatePlaidSelection,
+    getCorpayBankAccountFields,
 };
 
 export type {BusinessAddress, PersonalAddress};
diff --git a/src/pages/ReimbursementAccount/NonUSD/BankInfo/BankInfo.tsx b/src/pages/ReimbursementAccount/NonUSD/BankInfo/BankInfo.tsx
index d6a9267b4f94..7c5d853428c5 100644
--- a/src/pages/ReimbursementAccount/NonUSD/BankInfo/BankInfo.tsx
+++ b/src/pages/ReimbursementAccount/NonUSD/BankInfo/BankInfo.tsx
@@ -1,11 +1,17 @@
 import type {ComponentType} from 'react';
-import React from 'react';
+import React, {useCallback, useEffect, useState} from 'react';
+import {useOnyx} from 'react-native-onyx';
 import InteractiveStepWrapper from '@components/InteractiveStepWrapper';
 import useLocalize from '@hooks/useLocalize';
 import useSubStep from '@hooks/useSubStep';
-import type {SubStepProps} from '@hooks/useSubStep/types';
+import * as BankAccounts from '@userActions/BankAccounts';
 import CONST from '@src/CONST';
+import ONYXKEYS from '@src/ONYXKEYS';
+import INPUT_IDS from '@src/types/form/ReimbursementAccountForm';
+import BankAccountDetails from './substeps/BankAccountDetails';
 import Confirmation from './substeps/Confirmation';
+import UploadStatement from './substeps/UploadStatement';
+import type {BankInfoSubStepProps, CorpayFormField} from './types';
 
 type BankInfoProps = {
     /** Handles back button press */
@@ -15,16 +21,41 @@ type BankInfoProps = {
     onSubmit: () => void;
 };
 
-const bodyContent: Array<ComponentType<SubStepProps>> = [Confirmation];
+const {COUNTRY} = INPUT_IDS.ADDITIONAL_DATA;
+
+const bodyContent: Array<ComponentType<BankInfoSubStepProps>> = [BankAccountDetails, UploadStatement, Confirmation];
 
 function BankInfo({onBackButtonPress, onSubmit}: BankInfoProps) {
     const {translate} = useLocalize();
 
+    const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT);
+    const [reimbursementAccountDraft] = useOnyx(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT);
+    const [corpayFields, setCorpayFields] = useState<CorpayFormField[]>([]);
+    const country = reimbursementAccountDraft?.[COUNTRY] ?? '';
+    const policyID = reimbursementAccount?.achData?.policyID ?? '-1';
+    const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`);
+    const currency = policy?.outputCurrency ?? '';
+
     const submit = () => {
         onSubmit();
     };
 
-    const {componentToRender: SubStep, isEditing, screenIndex, nextScreen, prevScreen, moveTo, goToTheLastStep} = useSubStep<SubStepProps>({bodyContent, startFrom: 0, onFinished: submit});
+    const {
+        componentToRender: SubStep,
+        isEditing,
+        screenIndex,
+        nextScreen,
+        prevScreen,
+        moveTo,
+        goToTheLastStep,
+        resetScreenIndex,
+    } = useSubStep<BankInfoSubStepProps>({bodyContent, startFrom: 0, onFinished: submit});
+
+    // Temporary solution to get the fields for the corpay bank account fields
+    useEffect(() => {
+        const response = BankAccounts.getCorpayBankAccountFields(country, currency);
+        setCorpayFields((response?.formFields as CorpayFormField[]) ?? []);
+    }, [country, currency]);
 
     const handleBackButtonPress = () => {
         if (isEditing) {
@@ -34,11 +65,27 @@ function BankInfo({onBackButtonPress, onSubmit}: BankInfoProps) {
 
         if (screenIndex === 0) {
             onBackButtonPress();
-        } else {
+        } else if (currency === CONST.CURRENCY.AUD) {
             prevScreen();
+        } else {
+            resetScreenIndex();
         }
     };
 
+    const handleNextScreen = useCallback(() => {
+        if (screenIndex === 2) {
+            nextScreen();
+            return;
+        }
+
+        if (currency !== CONST.CURRENCY.AUD) {
+            goToTheLastStep();
+            return;
+        }
+
+        nextScreen();
+    }, [currency, goToTheLastStep, nextScreen, screenIndex]);
+
     return (
         <InteractiveStepWrapper
             wrapperID={BankInfo.displayName}
@@ -49,8 +96,9 @@ function BankInfo({onBackButtonPress, onSubmit}: BankInfoProps) {
         >
             <SubStep
                 isEditing={isEditing}
-                onNext={nextScreen}
+                onNext={handleNextScreen}
                 onMove={moveTo}
+                corpayFields={corpayFields}
             />
         </InteractiveStepWrapper>
     );
diff --git a/src/pages/ReimbursementAccount/NonUSD/BankInfo/substeps/BankAccountDetails.tsx b/src/pages/ReimbursementAccount/NonUSD/BankInfo/substeps/BankAccountDetails.tsx
new file mode 100644
index 000000000000..b3482a516c1f
--- /dev/null
+++ b/src/pages/ReimbursementAccount/NonUSD/BankInfo/substeps/BankAccountDetails.tsx
@@ -0,0 +1,94 @@
+import React, {useCallback, useMemo} from 'react';
+import {View} from 'react-native';
+import FormProvider from '@components/Form/FormProvider';
+import InputWrapper from '@components/Form/InputWrapper';
+import type {FormInputErrors, FormOnyxKeys, FormOnyxValues} from '@components/Form/types';
+import Text from '@components/Text';
+import TextInput from '@components/TextInput';
+import useLocalize from '@hooks/useLocalize';
+import useReimbursementAccountStepFormSubmit from '@hooks/useReimbursementAccountStepFormSubmit';
+import useThemeStyles from '@hooks/useThemeStyles';
+import type {BankInfoSubStepProps} from '@pages/ReimbursementAccount/NonUSD/BankInfo/types';
+import CONST from '@src/CONST';
+import ONYXKEYS from '@src/ONYXKEYS';
+
+function BankAccountDetails({onNext, isEditing, corpayFields}: BankInfoSubStepProps) {
+    const {translate} = useLocalize();
+    const styles = useThemeStyles();
+
+    const fieldIds = corpayFields.map((field) => field.id);
+
+    const validate = useCallback(
+        (values: FormOnyxValues<typeof ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM>): FormInputErrors<typeof ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM> => {
+            const errors: FormInputErrors<typeof ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM> = {};
+
+            corpayFields.forEach((field) => {
+                const fieldID = field.id as keyof FormOnyxValues<typeof ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM>;
+
+                if (field.isRequired && !values[fieldID]) {
+                    errors[fieldID] = translate('common.error.fieldRequired');
+                }
+
+                field.validationRules.forEach((rule) => {
+                    if (rule.regEx) {
+                        return;
+                    }
+
+                    if (new RegExp(rule.regEx).test(values[fieldID] ? String(values[fieldID]) : '')) {
+                        return;
+                    }
+
+                    errors[fieldID] = rule.errorMessage;
+                });
+            });
+
+            return errors;
+        },
+        [corpayFields, translate],
+    );
+
+    const handleSubmit = useReimbursementAccountStepFormSubmit({
+        fieldIds: fieldIds as Array<FormOnyxKeys<typeof ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM>>,
+        onNext,
+        shouldSaveDraft: isEditing,
+    });
+
+    const inputs = useMemo(() => {
+        return corpayFields.map((field) => {
+            return (
+                <View
+                    style={[styles.flex2, styles.mb6]}
+                    key={field.id}
+                >
+                    <InputWrapper
+                        InputComponent={TextInput}
+                        inputID={field.id}
+                        label={field.label}
+                        aria-label={field.label}
+                        role={CONST.ROLE.PRESENTATION}
+                        shouldSaveDraft={!isEditing}
+                    />
+                </View>
+            );
+        });
+    }, [corpayFields, styles.flex2, styles.mb6, isEditing]);
+
+    return (
+        <FormProvider
+            formID={ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM}
+            submitButtonText={translate(isEditing ? 'common.confirm' : 'common.next')}
+            onSubmit={handleSubmit}
+            validate={validate}
+            style={[styles.mh5, styles.flexGrow1]}
+        >
+            <View>
+                <Text style={[styles.textHeadlineLineHeightXXL, styles.mb6]}>{translate('bankInfoStep.whatAreYour')}</Text>
+                {inputs}
+            </View>
+        </FormProvider>
+    );
+}
+
+BankAccountDetails.displayName = 'BankAccountDetails';
+
+export default BankAccountDetails;
diff --git a/src/pages/ReimbursementAccount/NonUSD/BankInfo/substeps/Confirmation.tsx b/src/pages/ReimbursementAccount/NonUSD/BankInfo/substeps/Confirmation.tsx
index 9ff2b0e57de9..8abe5e41aaaf 100644
--- a/src/pages/ReimbursementAccount/NonUSD/BankInfo/substeps/Confirmation.tsx
+++ b/src/pages/ReimbursementAccount/NonUSD/BankInfo/substeps/Confirmation.tsx
@@ -1,16 +1,63 @@
-import React from 'react';
+import React, {useMemo} from 'react';
 import {View} from 'react-native';
+import {useOnyx} from 'react-native-onyx';
 import Button from '@components/Button';
+import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription';
 import SafeAreaConsumer from '@components/SafeAreaConsumer';
 import ScrollView from '@components/ScrollView';
+import Text from '@components/Text';
 import useLocalize from '@hooks/useLocalize';
-import type {SubStepProps} from '@hooks/useSubStep/types';
 import useThemeStyles from '@hooks/useThemeStyles';
+import type {BankInfoSubStepProps} from '@pages/ReimbursementAccount/NonUSD/BankInfo/types';
+import getSubstepValues from '@pages/ReimbursementAccount/utils/getSubstepValues';
+import ONYXKEYS from '@src/ONYXKEYS';
+import type {ReimbursementAccountForm} from '@src/types/form/ReimbursementAccountForm';
+import INPUT_IDS from '@src/types/form/ReimbursementAccountForm';
 
-function Confirmation({onNext}: SubStepProps) {
+function Confirmation({onNext, onMove, corpayFields}: BankInfoSubStepProps) {
     const {translate} = useLocalize();
     const styles = useThemeStyles();
 
+    const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT);
+    const [reimbursementAccountDraft] = useOnyx(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT);
+    const inputKeys = useMemo(() => {
+        const keys: Record<string, keyof ReimbursementAccountForm> = {};
+        corpayFields.forEach((field) => {
+            keys[field.id] = field.id;
+        });
+        return keys;
+    }, [corpayFields]);
+    const values = useMemo(() => getSubstepValues(inputKeys, reimbursementAccountDraft, reimbursementAccount), [inputKeys, reimbursementAccount, reimbursementAccountDraft]);
+
+    const items = useMemo(
+        () => (
+            <>
+                {corpayFields.map((field) => {
+                    return (
+                        <MenuItemWithTopDescription
+                            description={field.label}
+                            title={values[field.id] ? String(values[field.id]) : ''}
+                            shouldShowRightIcon
+                            onPress={() => {
+                                onMove(0);
+                            }}
+                            key={field.id}
+                        />
+                    );
+                })}
+                {!!reimbursementAccountDraft?.[INPUT_IDS.ADDITIONAL_DATA.CORPAY.BANK_STATEMENT] && (
+                    <MenuItemWithTopDescription
+                        description={translate('bankInfoStep.bankStatement')}
+                        title={reimbursementAccountDraft[INPUT_IDS.ADDITIONAL_DATA.CORPAY.BANK_STATEMENT].map((file) => file.name).join(', ')}
+                        shouldShowRightIcon
+                        onPress={() => onMove(1)}
+                    />
+                )}
+            </>
+        ),
+        [corpayFields, onMove, reimbursementAccountDraft, translate, values],
+    );
+
     return (
         <SafeAreaConsumer>
             {({safeAreaPaddingBottomStyle}) => (
@@ -18,6 +65,9 @@ function Confirmation({onNext}: SubStepProps) {
                     style={styles.pt0}
                     contentContainerStyle={[styles.flexGrow1, safeAreaPaddingBottomStyle]}
                 >
+                    <Text style={[styles.textHeadlineLineHeightXXL, styles.ph5, styles.mb3]}>{translate('bankInfoStep.letsDoubleCheck')}</Text>
+                    <Text style={[styles.mutedTextLabel, styles.ph5, styles.mb5]}>{translate('bankInfoStep.thisBankAccount')}</Text>
+                    {items}
                     <View style={[styles.p5, styles.flexGrow1, styles.justifyContentEnd]}>
                         <Button
                             success
diff --git a/src/pages/ReimbursementAccount/NonUSD/BankInfo/substeps/UploadStatement.tsx b/src/pages/ReimbursementAccount/NonUSD/BankInfo/substeps/UploadStatement.tsx
new file mode 100644
index 000000000000..0f971566b815
--- /dev/null
+++ b/src/pages/ReimbursementAccount/NonUSD/BankInfo/substeps/UploadStatement.tsx
@@ -0,0 +1,110 @@
+import React, {useCallback, useState} from 'react';
+import {View} from 'react-native';
+import {useOnyx} from 'react-native-onyx';
+import type {FileObject} from '@components/AttachmentModal';
+import FormProvider from '@components/Form/FormProvider';
+import InputWrapper from '@components/Form/InputWrapper';
+import type {FormInputErrors, FormOnyxValues} from '@components/Form/types';
+import Text from '@components/Text';
+import UploadFile from '@components/UploadFile';
+import useLocalize from '@hooks/useLocalize';
+import useReimbursementAccountStepFormSubmit from '@hooks/useReimbursementAccountStepFormSubmit';
+import type {SubStepProps} from '@hooks/useSubStep/types';
+import useThemeStyles from '@hooks/useThemeStyles';
+import {getLastFourDigits} from '@libs/BankAccountUtils';
+import * as ValidationUtils from '@libs/ValidationUtils';
+import WhyLink from '@pages/ReimbursementAccount/NonUSD/WhyLink';
+import * as FormActions from '@userActions/FormActions';
+import CONST from '@src/CONST';
+import ONYXKEYS from '@src/ONYXKEYS';
+import INPUT_IDS from '@src/types/form/ReimbursementAccountForm';
+
+type UploadStatementProps = SubStepProps;
+
+const {BANK_STATEMENT} = INPUT_IDS.ADDITIONAL_DATA.CORPAY;
+const STEP_FIELDS = [BANK_STATEMENT];
+
+function UploadStatement({onNext, isEditing}: UploadStatementProps) {
+    const {translate} = useLocalize();
+    const styles = useThemeStyles();
+
+    const [reimbursementAccount] = useOnyx(ONYXKEYS.REIMBURSEMENT_ACCOUNT);
+    const [reimbursementAccountDraft] = useOnyx(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM_DRAFT);
+
+    const defaultValues = {
+        [BANK_STATEMENT]: reimbursementAccount?.achData?.additionalData?.corpay?.[BANK_STATEMENT] ?? reimbursementAccountDraft?.[BANK_STATEMENT] ?? [],
+    };
+
+    const [uploadedIDs, setUploadedID] = useState<FileObject[]>(defaultValues[BANK_STATEMENT]);
+
+    const validate = useCallback((values: FormOnyxValues<typeof ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM>): FormInputErrors<typeof ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM> => {
+        const baseError = ValidationUtils.getFieldRequiredErrors(values, STEP_FIELDS);
+
+        if (baseError) {
+            return baseError;
+        }
+
+        return {};
+    }, []);
+
+    const handleSubmit = useReimbursementAccountStepFormSubmit({
+        fieldIds: STEP_FIELDS,
+        onNext,
+        shouldSaveDraft: isEditing,
+    });
+
+    const handleSelectIDFile = (files: FileObject[]) => {
+        FormActions.setDraftValues(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM, {[BANK_STATEMENT]: [...uploadedIDs, ...files]});
+        setUploadedID((prev) => [...prev, ...files]);
+    };
+
+    const handleRemoveIDFile = (fileName: string) => {
+        const newUploadedIDs = uploadedIDs.filter((file) => file.name !== fileName);
+        FormActions.setDraftValues(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM, {[BANK_STATEMENT]: newUploadedIDs});
+        setUploadedID(newUploadedIDs);
+    };
+
+    const setUploadError = (error: string) => {
+        if (!error) {
+            FormActions.clearErrorFields(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM);
+            return;
+        }
+
+        FormActions.setErrorFields(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM, {[BANK_STATEMENT]: {onUpload: error}});
+    };
+
+    return (
+        <FormProvider
+            formID={ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM}
+            submitButtonText={translate(isEditing ? 'common.confirm' : 'common.next')}
+            onSubmit={handleSubmit}
+            validate={validate}
+            style={[styles.mh5, styles.flex1]}
+        >
+            <View>
+                <Text style={[styles.textHeadlineLineHeightXXL, styles.mb6]}>{translate('bankInfoStep.uploadYourLatest')}</Text>
+                <Text style={[styles.mutedTextLabel, styles.mb3]}>
+                    {translate('bankInfoStep.pleaseUpload', {lastFourDigits: getLastFourDigits(reimbursementAccountDraft?.accountNumber ?? '')})}
+                </Text>
+                <Text style={[styles.mutedTextLabel, styles.mb3, styles.mt6]}>{translate('bankInfoStep.bankStatement')}</Text>
+                <InputWrapper
+                    InputComponent={UploadFile}
+                    buttonText={translate('bankInfoStep.chooseFile')}
+                    uploadedFiles={uploadedIDs}
+                    onUpload={handleSelectIDFile}
+                    onRemove={handleRemoveIDFile}
+                    setError={setUploadError}
+                    fileLimit={CONST.NON_USD_BANK_ACCOUNT.FILE_LIMIT}
+                    acceptedFileTypes={[...CONST.NON_USD_BANK_ACCOUNT.ALLOWED_FILE_TYPES]}
+                    value={uploadedIDs}
+                    inputID={BANK_STATEMENT}
+                />
+                <WhyLink containerStyles={[styles.mt6]} />
+            </View>
+        </FormProvider>
+    );
+}
+
+UploadStatement.displayName = 'UploadStatement';
+
+export default UploadStatement;
diff --git a/src/pages/ReimbursementAccount/NonUSD/BankInfo/types.ts b/src/pages/ReimbursementAccount/NonUSD/BankInfo/types.ts
new file mode 100644
index 000000000000..17943b29e3d3
--- /dev/null
+++ b/src/pages/ReimbursementAccount/NonUSD/BankInfo/types.ts
@@ -0,0 +1,17 @@
+import type {SubStepProps} from '@hooks/useSubStep/types';
+import type {ReimbursementAccountForm} from '@src/types/form';
+
+type CorpayFormField = {
+    id: keyof ReimbursementAccountForm;
+    isRequired: boolean;
+    errorMessage: string;
+    label: string;
+    regEx?: string;
+    validationRules: Array<{errorMessage: string; regEx: string}>;
+    defaultValue?: string;
+    detailedRule?: Array<{isRequired: boolean; value: Array<{errorMessage: string; regEx: string; ruleDescription: string}>}>;
+};
+
+type BankInfoSubStepProps = SubStepProps & {corpayFields: CorpayFormField[]};
+
+export type {BankInfoSubStepProps, CorpayFormField};
diff --git a/src/pages/ReimbursementAccount/NonUSD/WhyLink.tsx b/src/pages/ReimbursementAccount/NonUSD/WhyLink.tsx
new file mode 100644
index 000000000000..fdbbf0e23927
--- /dev/null
+++ b/src/pages/ReimbursementAccount/NonUSD/WhyLink.tsx
@@ -0,0 +1,44 @@
+import React from 'react';
+import type {StyleProp, ViewStyle} from 'react-native';
+import {View} from 'react-native';
+import Icon from '@components/Icon';
+import * as Expensicons from '@components/Icon/Expensicons';
+import TextLink from '@components/TextLink';
+import useLocalize from '@hooks/useLocalize';
+import useTheme from '@hooks/useTheme';
+import useThemeStyles from '@hooks/useThemeStyles';
+
+type WhyLinkProps = {
+    /** Style for wrapping View */
+    containerStyles?: StyleProp<ViewStyle>;
+};
+
+function WhyLink({containerStyles}: WhyLinkProps) {
+    const styles = useThemeStyles();
+    const theme = useTheme();
+    const {translate} = useLocalize();
+
+    return (
+        <View style={[styles.flexRow, styles.alignItemsCenter, containerStyles]}>
+            <Icon
+                src={Expensicons.QuestionMark}
+                width={12}
+                height={12}
+                fill={theme.icon}
+            />
+            <View style={[styles.ml2, styles.dFlex, styles.flexRow]}>
+                <TextLink
+                    style={[styles.textMicro]}
+                    // TODO add link
+                    href=""
+                >
+                    {translate('common.whyDoWeAskForThis')}
+                </TextLink>
+            </View>
+        </View>
+    );
+}
+
+WhyLink.displayName = 'WhyLink';
+
+export default WhyLink;
diff --git a/src/types/form/ReimbursementAccountForm.ts b/src/types/form/ReimbursementAccountForm.ts
index 2554a28eef54..e76158244199 100644
--- a/src/types/form/ReimbursementAccountForm.ts
+++ b/src/types/form/ReimbursementAccountForm.ts
@@ -1,3 +1,4 @@
+import type {FileObject} from '@components/AttachmentModal';
 import type {Country} from '@src/CONST';
 import type DeepValueOf from '@src/types/utils/DeepValueOf';
 import type Form from './Form';
@@ -54,6 +55,8 @@ const INPUT_IDS = {
     ADDITIONAL_DATA: {
         COUNTRY: 'country',
         CORPAY: {
+            ACCOUNT_HOLDER_COUNTRY: 'accountHolderCountry',
+            BANK_STATEMENT: 'bankStatement',
             COMPANY_NAME: 'companyName',
             COMPANY_STREET: 'companyStreet',
             COMPANY_CITY: 'companyCity',
@@ -145,6 +148,11 @@ type ReimbursementAccountProps = {
 type NonUSDReimbursementAccountAdditionalProps = {
     /** Country of the reimbursement account */
     [INPUT_IDS.ADDITIONAL_DATA.COUNTRY]: Country | '';
+    /** Country of the account holder */
+    [INPUT_IDS.ADDITIONAL_DATA.CORPAY.ACCOUNT_HOLDER_COUNTRY]: Country | '';
+
+    /** Bank statement file */
+    [INPUT_IDS.ADDITIONAL_DATA.CORPAY.BANK_STATEMENT]: FileObject[];
 
     /** Company name */
     [INPUT_IDS.ADDITIONAL_DATA.CORPAY.COMPANY_NAME]: string;
diff --git a/src/types/onyx/ReimbursementAccount.ts b/src/types/onyx/ReimbursementAccount.ts
index 383820fc1ffe..17cbe4ac408b 100644
--- a/src/types/onyx/ReimbursementAccount.ts
+++ b/src/types/onyx/ReimbursementAccount.ts
@@ -1,4 +1,5 @@
 import type {ValueOf} from 'type-fest';
+import type {FileObject} from '@components/AttachmentModal';
 import type CONST from '@src/CONST';
 import type {Country} from '@src/CONST';
 import type {ACHContractStepProps, BeneficialOwnersStepProps, CompanyStepProps, ReimbursementAccountProps, RequestorStepProps} from '@src/types/form/ReimbursementAccountForm';
@@ -55,6 +56,9 @@ type Corpay = {
 
     /** Company annual volume */
     [INPUT_IDS.ADDITIONAL_DATA.CORPAY.ANNUAL_VOLUME]: string;
+
+    /** Bank statement */
+    [INPUT_IDS.ADDITIONAL_DATA.CORPAY.BANK_STATEMENT]: FileObject[];
 };
 
 /** Additional data where details of the non-USD reimbursements account are stored */
