portal.ramps.noah. Each method issues HTTP requests through portal.api to Portal’s Noah integration on the Client API using your client API key. You do not call Noah’s servers directly from the app.
For dashboard setup, signing keys, and supported CAIP-2 networks, see Noah integration overview. For HTTP shapes and webhooks, see the Noah workflow guides and Noah Business API / EMM documentation.
Prerequisites
- An initialized
Portalclient with a wallet and API access. - Noah enabled for your Portal environment and configured in the dashboard.
- For payins and payouts, the end user must complete Noah KYC with approved status before those flows succeed.
Architecture
Prefer
portal.ramps.noah over lower-level APIs. The SDK types for requests and responses are exported from @portal-hq/core (see the React Native SDK reference section portal.ramps.noah (Noah)).
Types and responses
Successful Client API responses use an envelope{ data: T, metadata?: Record<string, unknown> }. Methods on portal.ramps.noah return Promise of that envelope (for example NoahInitiateKycResponse is { data: { hostedUrl: string } }).
Throwing or rejected promises usually indicate network errors, TLS issues, or API error payloads returned by the SDK—handle them with try/catch like other async Portal calls.
initiateKyc
Starts hosted Noah onboarding. Opendata.hostedUrl in the system browser (for example Linking.openURL on React Native). Validate HTTPS and the hostname against the checkout domains Noah documents for your environment (extend the example allowlist accordingly).
The
returnUrl must be an HTTPS URL. Custom app schemes (e.g. myapp://callback) are not supported. For mobile applications, the recommended pattern is to use an HTTPS bridge page that redirects to a deep link after KYC completion.NoahInitiateKycResponse: { data: { hostedUrl: string } }.
This call only starts onboarding; KYC outcome and status changes arrive asynchronously via Noah
Customer webhooks. See Noah webhooks.initiatePayin
Creates a fiat-to-stablecoin payin and returns bank instructions and apayinId. Use a supported CAIP-2 network and the user’s wallet address as destinationAddress.
Returns —
NoahInitiatePayinResponse: { data: { payinId: string; cryptoCurrency: string; fee: NoahFeeDetails; bankDetails: BankDetails } }.
Payin lifecycle updates are asynchronous; track them with Noah
FiatDeposit and Transaction webhooks, not by polling this SDK response. See Noah webhooks.simulatePayin
Sandbox-oriented call to estimate fees or eligibility for a payin without creating a live payin. Typical body includes a NoahpaymentMethodId and fiat amount.
Returns —
NoahSimulatePayinResponse: { data: { fiatDepositId: string; reference?: string } }.
getPayoutCountries
Lists countries available for fiat payouts.NoahGetPayoutCountriesResponse: { data: { countries: Record<string, string[]> } }.
getPayoutChannels
Returns payout rails for a given crypto asset.country and fiatCurrency narrow results but are optional; only cryptoCurrency is required. Optional fiatAmount can refine channel availability.
Returns —
NoahGetPayoutChannelsResponse: { data: { items: Channel[]; pageToken?: string } }.
See also: Payouts.
getPayoutChannelForm
Loads the dynamic form schema for a channel so you can collect recipient fields before requesting a quote.
Returns —
NoahGetPayoutChannelFormResponse: { data: { formSchema?: Record<string, unknown>; formMetadata?: { contentHash: string } } }.
getPayoutQuote
Requests fees and crypto amount estimates for a payout. Includeform when the channel requires recipient data. Pass either fiatAmount or cryptoAmount — they are mutually exclusive.
Returns —
NoahGetPayoutQuoteResponse: includes payoutId, formSessionId, cryptoAmountEstimate, cryptoAuthorizedAmount, totalFee, and optional rate, breakdown, quote ({ signedQuote, expiry }), and nextStep.
initiatePayout
Executes a payout after quoting. For crypto-sourced payouts you may need to pass depositconditions from the quote response via a trigger payload; align with Payouts and Noah’s on-chain deposit triggers.
Returns —
NoahInitiatePayoutResponse: { data: { destinationAddress: string \| null; conditions: DepositSourceTriggerCondition[]; ruleId?: string } }.
After this call returns
destinationAddress and conditions, submit the onchain transfer to satisfy them. You can do this with any wallet — including Portal’s own send method (portal.sendAsset(...)) on the same Portal instance, which builds, signs, and broadcasts in one call.This call initiates the payout flow; completion and failures are reported asynchronously via Noah
Transaction webhooks. See Noah webhooks.getPaymentMethods
Returns payment methods available to the customer (for example cards or bank rails), including pagination tokens when present.
Returns —
NoahGetPaymentMethodsResponse: { data: { paymentMethods: PaymentMethod[]; pageToken?: string } }.
Error handling
Wrap calls intry/catch. Log or surface errors without printing full API responses in production if they might contain sensitive identifiers. Retry only for idempotent reads unless your product team confirms otherwise.
Related documentation
- React Native SDK reference —
@portal-hq/core(section portal.ramps.noah (Noah)) - Noah integration overview
- KYC, Payins, Payouts, Webhooks
- Noah docs — API concepts
- Noah docs — authentication & signing