> ## Documentation Index
> Fetch the complete documentation index at: https://docs.portalhq.io/llms.txt
> Use this file to discover all available pages before exploring further.

# ramps.noah.initiatePayin

> Create a Noah payin and return bank deposit instructions.

## Function Signature

```dart theme={null}
Future<NoahInitiatePayinResponse> initiatePayin(NoahInitiatePayinRequest request)
```

## Description

Initiates a Noah payin (on-ramp) and returns a `payinId` plus the bank deposit instructions the customer should use to fund it. Once the fiat deposit settles, Noah sends crypto to `destinationAddress` on the specified network.

Payin lifecycle updates arrive asynchronously through Noah `FiatDeposit` and `Transaction` webhooks — do not poll this response.

## Parameters

| Parameter | Type | Required | Description |
| - | - | - | - |
| `request.fiatCurrency` | `String` | Yes | Fiat currency code, for example `USD`. |
| `request.cryptoCurrency` | `String` | Yes | Noah crypto asset code, for example `USDC_TEST` in sandbox. |
| `request.network` | `String` | Yes | CAIP-2 chain identifier. Use a `NoahNetwork` constant. |
| `request.destinationAddress` | `String` | Yes | Address that receives crypto after settlement. |
| `request.businessFees` | `Map<String?, NoahBusinessFee?>?` | No | Accepted for parity with the native SDKs, but ignored by Portal. Business fees come from the [Noah configuration](/integrations/On-Off-Ramp/noah) in the Portal Dashboard. |

## Returns

**`NoahInitiatePayinResponse`** - An envelope containing:

| Property | Type | Description |
| - | - | - |
| `data` | `NoahInitiatePayinData` | The response payload. |
| `metadataJson` | `String?` | JSON-encoded response metadata. Read it decoded through the `metadata` getter. |

`NoahInitiatePayinData`:

| Property | Type | Description |
| - | - | - |
| `payinId` | `String` | Identifier for the created payin. |
| `bankDetails` | `NoahBankDetails` | Deposit instructions for the customer. |

`NoahBankDetails`:

| Property | Type | Description |
| - | - | - |
| `paymentMethodId` | `String` | Payment method identifier. Pass it to `simulatePayin` in sandbox. |
| `paymentMethodType` | `String` | Payment rail type, for example `BankSepa` or `IdentifierPix`. |
| `accountNumber` | `String` | Bank account number to deposit into. |
| `cryptoCurrency` | `String` | Crypto currency for this payin. |
| `network` | `String` | Network identifier. |
| `fee` | `NoahFeeDetails` | Fee breakdown: `fiatCurrencyCode`, `totalFeePct`, `totalFeeBase`, `totalFeeMin`. |
| `accountHolderName` | `String?` | Account holder name. |
| `bankCode` | `String?` | Bank routing or sort code. |
| `bankName` | `String?` | Bank name. |
| `bankAddress` | `NoahBankAddress?` | Bank address: `street`, `street2`, `city`, `postCode`, `state`, `country` — all optional. |
| `reference` | `String?` | Payment reference the customer must include. |
| `relatedPaymentMethods` | `List<NoahBankToAddressRelatedPaymentMethod?>?` | Related payment methods for this destination. Each has `paymentMethodId`, `paymentMethodType`, `fee`, and optional `details` (`accountNumber`, `bankCode`). |

`NoahBankDetails` carries sensitive financial data. Render it to the user as deposit instructions and keep it in memory; do not write it to logs, crash reports, or analytics.

## Example

```dart theme={null}
import 'package:portal_flutter/portal_flutter.dart';

final portal = Portal();

try {
  final address = (await portal.getAddress(NoahNetwork.ethereumSepolia))!; // Requires an existing wallet

  final response = await portal.ramps.noah.initiatePayin(
    NoahInitiatePayinRequest(
      fiatCurrency: 'USD',
      cryptoCurrency: 'USDC_TEST',
      network: NoahNetwork.ethereumSepolia,
      destinationAddress: address,
    ),
  );

  print('Payin: ${response.data.payinId}');
  // Show response.data.bankDetails to the user as deposit instructions — do not log it.
} on PortalException catch (e) {
  print('initiatePayin failed: [${e.code}] ${e.message}');
}
```

## Errors

| Code | Description |
| - | - |
| `NOT_INITIALIZED` | Portal was not initialized |
| `NOAH_INITIATE_PAYIN_ERROR` | Failed to initiate the payin — for example an unsupported `network`, or the customer has not completed KYC |

## Related

* [Noah virtual accounts and payouts guide](../guide/noah)
* [ramps.noah.simulatePayin](./noah-simulatepayin)
* [Noah payins workflow](/integrations/On-Off-Ramp/noah-payins)
* [Noah webhooks](/integrations/On-Off-Ramp/noah-webhooks)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.