SME Growth Team / Portal / DB Pay Onboarding
DB PAY / FT PAY · OPERATOR CONSOLE

Send an onboarding link

Build the client’s link, copy a ready-made message, and see where their submission lands.

Form is live GET /tools/dbpay-ftpay-onboarding.html → 200, byte-identical to origin/main (sha256 a3f4d737179614bc…), checked 2026-09-04 — the fixed version is what clients see. Nothing to deploy.
01

Build the link

Pick the product and add a referrer if you want the introduction credited. The link updates as you type.

Credits whoever introduced them.

Loads details you already staged.

Client link
Send to anyone
?p=ftpay

Client types their Companies House number — everything else auto-fills.

Both products
?p=both

One form opens both accounts.

Credit a referrer
&via=clientname

Adds the referrer to their record. Stored to 60 characters.

Pre-filled
&ref=dbf_xxxx

Loads details staged in advance. Sent alongside p=, never instead of it.

02

Send it

Both messages already contain the link you built above. Copy, replace the name, send.

Email

          
WhatsApp / SMS

          
03

What the client does

About five minutes, in this order. Useful when they ring you halfway through.

  1. Enters their Companies House number — company and directors auto-fill.
  2. Confirms business details, contact, turnover and industry.
  3. Uploads three documents: certificate of incorporation, proof of business address, recent bank statement (PDF or photo).
  4. Adds each director with ID and proof of address, plus wallet, then signs the declaration.
  5. Submits. The bar must reach 25 of 25 and consent must be ticked before Submit enables.
04

Where submissions land

Everything flows into Supabase automatically. Nothing to file by hand.

WhatWhere it goes
Form dataTable dbpay_ftpay_onboarding — one row per client, keyed by submission_ref. Status flips invited → submitted.
DocumentsPrivate encrypted bucket dbpay-ftpay-docs/<submission_ref>/. Never public; service-role access only.
Due diligenceRuns automatically — Companies House, sanctions, scoring — writing dd_verdict, dd_score and dd_dossier_url onto the same row.
SecurityShort-lived signed upload URLs, per-IP rate limits, keys server-side, consent and wallet-match enforced server-side.
05

Live check

The portal publishes itself when a change merges, so there is no deploy step. Last end-to-end verification:

Page
200 · 19,591 bytes · byte-identical to origin/main (sha256 a3f4d737179614bc…)
Backend
6 of 6 functions live · lookup · prefill · intake · ch-doc · ocr-id · sign-upload
Render
0 console errors · progress counter reads 1 of 25
Checked
2026-09-04
Optional — not blocking

Automating the final push into FTFT

The last step — pushing a verified pack into FTFT’s own portal — has no automation on our side [proof: no ftft push handler in _web/portal-netlify/netlify/functions/]. Wiring it needs a look at FTFT’s /mod/ “add client” screen: field labels, which are required, dropdown options, and whether it offers CSV or API rather than just the form.

No document exists for this and nothing is waiting on it. Everything above works and is sendable today; this only removes one manual re-key at the very end.

SME Growth Team OPERATIONS · DB PAY / FT PAY CO-BRANDED ONBOARDING · BLOCK surface.dbpay-ftpay-kyb-onboarding