> ## 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.getPayoutChannelForm

> Fetch the dynamic form schema for a Noah payout channel.

## Function Signature

```dart theme={null}
Future<NoahGetPayoutChannelFormResponse> getPayoutChannelForm(String channelId)
```

## Description

Loads the dynamic form schema for a payout channel so you can collect the recipient fields that channel requires before requesting a quote.

The schema depends on the region the customer completed KYC in, so build the form you send to [`getPayoutQuote`](./noah-getpayoutquote) from the schema returned for that customer.

<Tip>
  Channels returned by [`getPayoutChannels`](./noah-getpayoutchannels) may already include an inline `formSchema`. When they do, use it directly and skip this call.
</Tip>

## Parameters

| Parameter | Type | Required | Description |
| - | - | - | - |
| `channelId` | `String` | Yes | Channel identifier from `getPayoutChannels`. |

## Returns

**`NoahGetPayoutChannelFormResponse`** - An envelope containing:

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

`NoahGetPayoutChannelFormData`:

| Property | Type | Description |
| - | - | - |
| `formSchema` | `Map<String, dynamic>?` | Getter: the JSON Schema describing the fields to collect, decoded from `formSchemaJson`. `null` when absent or malformed. |
| `formSchemaJson` | `String?` | The raw JSON-encoded schema. Prefer the `formSchema` getter. |
| `formMetadata` | `NoahFormMetadata?` | Schema metadata — `contentHash: String`. |

## Example

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

final portal = Portal();

try {
  final response = await portal.ramps.noah.getPayoutChannelForm('ch-1');

  final schema = response.data.formSchema;
  if (schema == null) {
    print('Channel requires no recipient form');
  } else {
    // Render form fields from `schema` per Noah's JSON Schema
    print('Schema keys: ${schema.keys.toList()..sort()}');
    print('Content hash: ${response.data.formMetadata?.contentHash ?? 'none'}');
  }
} on PortalException catch (e) {
  print('getPayoutChannelForm failed: [${e.code}] ${e.message}');
}
```

## Errors

| Code | Description |
| - | - |
| `NOT_INITIALIZED` | Portal was not initialized |
| `NOAH_GET_PAYOUT_CHANNEL_FORM_ERROR` | Failed to get the channel form — for example the channel id does not exist |

## Related

* [Noah virtual accounts and payouts guide](../guide/noah)
* [ramps.noah.getPayoutChannels](./noah-getpayoutchannels)
* [ramps.noah.getPayoutQuote](./noah-getpayoutquote)
* [Noah payouts workflow](/integrations/On-Off-Ramp/noah-payouts)


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