Skip to content
Last updated

Merchant experience flows

Use these flows to design the screens around TalusPay's hosted onboarding. Your app owns the entry point and status screen; TalusPay hosts the application, signing and requests for additional KYC information.

The messages and button labels below are suggested UI copy. Status values and actions come from the API reference and KYC guide.

Start onboarding

Sign the merchant in to your app before opening their onboarding URL. Create the merchant and link on your server, using account credentials. Keep the returned URL private: it signs the merchant in to hosted onboarding.

Hosted onboardingTalusPay APIYour app and serverHosted onboardingTalusPay APIYour app and serverRegister a merchant webhook before onboardingAdditional owners sign before KYC startsWebhooks update progress independently of the redirectMerchantSelect Start application1POST /v1/merchants2Merchant with id3POST /v1/onboarding_links4url and expires_at5Open the returned url6Complete application and sign7Redirect to return_url, if provided8GET /v1/merchants/{merchant_id}9Current application and payment statuses10Show progress and the next available action11Merchant
Hosted onboardingTalusPay APIYour app and serverHosted onboardingTalusPay APIYour app and serverRegister a merchant webhook before onboardingAdditional owners sign before KYC startsWebhooks update progress independently of the redirectMerchantSelect Start application1POST /v1/merchants2Merchant with id3POST /v1/onboarding_links4url and expires_at5Open the returned url6Complete application and sign7Redirect to return_url, if provided8GET /v1/merchants/{merchant_id}9Current application and payment statuses10Show progress and the next available action11Merchant

After returning: fetch the merchant on your server and show its current status. The redirect alone doesn't prove that signing, KYC or payment setup finished. Implement this flow.

Resume an unfinished application

Offer Continue application for IN_PROGRESS, or Sign application for READY_TO_SIGN. Keep the same merchant ID when resuming so the merchant picks up where they left off.

Resume flow: fetch the current merchant, offer Continue or Sign while editable, reuse the latest unexpired link or create a new one for the same merchant, then redirect to hosted onboarding. For signed applications, show current progress.Resume flow: fetch the current merchant, offer Continue or Sign while editable, reuse the latest unexpired link or create a new one for the same merchant, then redirect to hosted onboarding. For signed applications, show current progress.

Check the application: use GET /v1/merchants/{merchant_id} and its lead_onboarding_status. IN_PROGRESS and READY_TO_SIGN allow the merchant to continue; once the main owner signs (COMPLETED), show signing or review progress instead. See the status guide for other states.

Choose the link: reuse a saved URL only when your server knows it is the latest link and its expires_at is in the future. If it is missing, expired or possibly replaced, call POST /v1/onboarding_links with the same merchant_id and use the returned url. Creating a new link invalidates all older links for that merchant.

Handle failures: if the status read or link request fails, stay on the status screen and offer Try again. Prevent repeated clicks while requesting a link. If a link is rejected, refresh the merchant's status before offering another one.

Show progress with a clear next action

Show a readable status, a short explanation, and a button only when the merchant has something to do. Keep application review and payment setup separate: an approved application is not proof that payments are ready.

Application and review

API stateSuggested heading and messageAction
lead_onboarding_status is IN_PROGRESSYour application is in progress. Complete your business and owner details, or continue where you left off.Continue application → hosted onboarding
READY_TO_SIGNYour application is ready to sign. Review it and sign the merchant agreement.Sign application → hosted onboarding
COMPLETEDYour application is signed. Any remaining owners must sign before review can begin. Once all signatures are collected, review starts automatically.No application editing action; refresh status when the merchant returns
KYC_IN_PROGRESSYour application is being reviewed. We're verifying your business and its owners.No action; refresh status when the merchant returns
APPROVEDYour application is approved. Check payment setup below.Use the payment setup state
APPROVED_ON_HOLD or PENDEDCheck your application review. Read the expanded approval status to show whether action or waiting is needed.Use the review details below
FAILEDOnboarding could not be completed. Show the available review outcome or support contact.Contact support using your configured support destination

Every merchant starts at IN_PROGRESS, even before any application data is sent, so use Start application for a merchant you have just created and Continue application after that. Clearing a required field moves a READY_TO_SIGN merchant back to IN_PROGRESS. Treat a status you don't know as one you don't act on: new statuses may be added.

Requests for more information

For a submitted application, request GET /v1/merchants/{merchant_id}?expand=approval_status when review details are needed. The expansion calls the KYC provider live; avoid continuous polling.

Expanded approval_statusSuggested heading and messageAction
APPROVED_WITH_REVIEWMore information needed. Your application is approved, but the review team needs additional information.Provide information → status_review_url
PENDED_ACTION_REQUIREDMore information needed. Send the requested information so review can continue.Provide information → status_review_url
APPROVED_UNDER_REVIEW or PENDED_UNDER_REVIEWYour information is being reviewed. No additional information is requested right now.Optional View review status → status_review_url
APPROVEDYour application is approved. Check payment setup below.Use the payment setup state
DECLINEDYour application was declined. Contact support if you need help understanding the outcome.Contact support; don't offer another application as a retry
Missing valueReview details are not available yet. Check again later.Refresh status; keep the known application status visible

Only show a review button when status_review_url is present. A missing expansion can mean KYC has not decided or could not be reached; it is not a decline. A failed status request should say We couldn't refresh your status and offer Try again, rather than replacing the merchant's status with a failure outcome.

Payment setup

payment_onboarding_statusSuggested heading and messageAction
NOT_STARTEDPayments are not set up yet. Application approval and payment setup are separate steps.Continue showing application progress; don't offer a payment action
ONBOARDEDPayment setup is complete. Your account has been set up for payments.Show setup completion; this guide doesn't provide a payment action
FAILEDPayment setup needs attention. We couldn't finish setting up payments.Contact support; don't ask the merchant to repeat their application

For a new integration, use merchant.payments_onboarded to learn when setup completes. If the event is missed, read the current merchant's payment_onboarding_status. The public API and merchant webhooks do not return payment gateway credentials. Endpoints for taking payments are not published yet.

If deactivated is true, show Account deactivated with a support destination instead of a ready-to-use payment action, even when earlier onboarding statuses were successful. Don't use these UI suggestions to override a current KYC restriction. See How KYC works for review conditions.

Keep the status screen current

Keep the status screen current: verify each webhook's signature and timestamp, reject invalid deliveries, and acknowledge duplicates with a 2xx response. Persist new events before acknowledging within 8 seconds, then read the current merchant and update progress and available actions. A merchant returning or selecting Refresh status also triggers a current merchant read.Keep the status screen current: verify each webhook's signature and timestamp, reject invalid deliveries, and acknowledge duplicates with a 2xx response. Persist new events before acknowledging within 8 seconds, then read the current merchant and update progress and available actions. A merchant returning or selecting Refresh status also triggers a current merchant read.

Persist work before acknowledging it, and finish the response within 8 seconds. Failed deliveries aren't retried automatically. Refresh from the API when a merchant returns, when an event leaves the state unclear, or when a status request is retried. Don't assume a missing webhook means onboarding failed. See Webhook delivery.

Verify the experience

Test a new application, a return before all signatures are collected, an expired or replaced link, a request for more information, a declined application, payment setup failure, a missed webhook and a failed status refresh. Use sandbox test events for the supported simulations; the testing guide lists which cases need a real hosted flow or fixtures.

Next: implement hosted onboarding, read KYC statuses, or test the integration.