Product Overview¶
Vision¶
DragonPay is a payment hub that enables the initiation and execution of payment orders, designed to help credit unions offer modern payment products through their existing digital-banking environments. DragonPay enables CUs to attract, retain, and better serve business customers by offering payment capabilities they otherwise could not economically build themselves.
DragonPay provides:
Payment Products and customer-channel options
Multiple Route Types within each Product
Centralized payment control and execution
Reusable external-system connectivity
Unified operational, financial, and reporting controls across Products, reducing the CU's vendor-management burden
Payment Hub capability map¶
The PH sections define logical responsibilities. They do not necessarily require separate applications, teams, or microservices. DragonPay separates customer payment intent from payment execution. Products create normalized payment requests; the Hub controls the payment lifecycle and selects the appropriate configured execution path; Connectors isolate CU-, processor-, provider-, and Route-Type-specific behavior.
| Section | Responsibility | Business value |
|---|---|---|
| PH-01 — Tenant, Identity, and Access | Establishes Tenant, Identity, application, role, and Permission context. | Protects CU data and prevents unauthorized or cross-Tenant access. |
| PH-02 — Product Configuration | Defines available Products, Tenant Product assignment, and versioned Tenant-specific Product configuration. | Allows each CU to run the same Product with different, versioned configuration without custom Hub logic. |
| PH-03 — Payment Model | Defines the common payment-order structure, Actions, Legs, Execution Attempts, and provider transactions. | Creates one consistent payment language across all Products and Route Types. |
| PH-04 — Payment Orchestration | Controls payment lifecycle, waits, retries, cancellation, expiration, and corrective actions. | Keeps processing reliable through customer and external-system delays or failures. |
| PH-05 — Party and Payment Instrument Management | Represents participants, accounts, cards, wallets, tokens, and validation information. | Separates common participant and instrument data from Product and provider formats. |
| PH-06 — Policy and Transaction Risk | Applies eligibility, limits, velocity, risk rules, required actions, and external Decisions. | Provides explainable control over which payment orders may proceed. |
| PH-07 — Payment Routing | Selects the Product Route Type, execution capability, provider, connection, and Connector. | Allows one Product to use different execution routes by CU and payment condition. |
| PH-08 — Payment Execution and Connector Framework | Creates Payment Instructions, invokes Connectors, manages Execution Attempts, and normalizes results. | Provides one safe execution framework across CU and provider interfaces. |
| PH-09 — Payment History and Commercial Records | Maintains immutable payment history and related Fee, Cost, and Billing records. | Supports audit, operations, reconciliation, billing, and accounting integration. |
| PH-10 — Reconciliation | Compares DragonPay records with external acknowledgements, transactions, postings, Returns, and evidence. | Confirms that all responsible systems recorded the same payment outcome. |
| PH-11 — Exception Management | Manages unresolved problems, investigations, approvals, corrective requests, and resolutions. | Provides controlled human intervention when automation cannot resolve an issue safely. |
| PH-12 — Communication and Notification | Produces invitations, transactional notifications, delivery records, receipts, and documents. | Keeps customers, CUs, and operations accurately informed. |
| PH-13 — Reporting and Operations | Provides payment search, timelines, dashboards, health, attention items, reports, and exports. | Gives DragonPay and CU teams visibility into activity and operational performance. |
Why the structure matters¶
Multiple Products¶
Different payment types require different initiation methods and customer experiences but can reuse the same Payment Hub.
Multiple Route Types¶
A Payment Product is not permanently tied to one network, processor, core, or execution method.
Multiple credit unions¶
Each CU may use different technologies, providers, policies, and Route Types while the central Hub remains consistent.
Speed without permanent lock-in¶
The initial CU’s existing systems can be used without embedding those technologies directly into the Product or core Hub architecture.
Production payment operations¶
DragonPay must manage more than payment submission, including:
Idempotency
Delayed and unknown outcomes
Reconciliation
Returns and corrections
Exceptions
Audit history
Communications
Reporting
Initial delivery approach¶
The full architecture defines DragonPay’s direction and responsibility model. The first release will support P2P. Early follow up features, if not parallel within first release will be Cross-Border product and an introducing FedNow as an execution Route Type where supported. Upon confirmation of the first CU, integration with the CU's digital-banking platform and core systems will be required.
PP-01 — P2P Payment Product¶
PP-01 defines the information and customer interactions required to initiate a P2P payment order.
It includes:
Authenticated Sender
Funding-account selection
Known- and unknown-Recipient flows
Recipient claim and receiving-account selection using “secret” out of band word.
P2P cancellation, expiration, status, and Return behavior
Supported channel-delivery options
PP-01 submits the payment order to the Payment Hub for routing and execution through a CU-supported Product Route Type.
Business value: Establishes DragonPay’s first marketable Payment Product while proving that one Product can support multiple channels and execution Route Types.
CX-01 — PP-01 Digital Experience¶
CX-01 defines the detailed implementation of DragonPay-provided PP-01 channel options.
It includes:
Sender experience
External Recipient experience
Hosted and embedded delivery
Authenticated CU launch
CU branding and content
Payment review, Confirmation, status, cancellation, history, and receipts
Accessibility, security, telemetry, and responsive behavior
Reference behavior for CU-built interfaces
CX-01 is a separate implementation specification, but it remains part of the PP-01 Payment Product.
OX-01 - Operations & Administration Experience¶
OX-01 defines the shared operational experience used by DragonPay and authorized CU teams to manage payments across Products and Route Types.
It includes:
Payment search and transaction detail
Payment lifecycle and execution timelines
Exception and reconciliation review
Risk, validation, and attention items
Approved corrective and administrative actions
Operational dashboards, reporting, and exports
DragonPay-provided administrative interface
APIs for integration with CU operational, core, or reporting systems
Separation of transactional processing from operational reporting and analytical data
Operational actions are executed through controlled Payment Hub services and remain permissioned, validated, and auditable.
Business value: Provides a single operational control point across DragonPay Payment Products and Route Types while allowing CUs to use DragonPay interfaces or integrate the same capabilities into their existing operational environments.
Architecture overview¶
* = future / growth, not built yet. PH-01 (Identity/Access) is omitted from this diagram — it applies across everything, not one path through the system.
<figure>
<svg viewBox="0 0 900 760" role="img" aria-label="DragonPay platform architecture: channel apps on the left connect through the Hub's capabilities, a Connector layer, and Integration to the CU's core banking system and payment Route Types, with FedNow shown as a future direct-connect option." style="max-width:100%;height:auto;font-family:inherit;">
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M0,0 L10,5 L0,10 z" fill="currentColor"/>
</marker>
<marker id="arrowA" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M0,0 L10,5 L0,10 z" fill="var(--accent)"/>
</marker>
</defs>
<rect x="20" y="20" width="410" height="140" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="225" y="40" font-size="13" font-weight="600" text-anchor="middle" fill="currentColor">Digital Banking Platform</text>
<rect x="35" y="55" width="180" height="45" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="125.0" y="81.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">P2P (CX-01)</text>
<rect x="225" y="55" width="190" height="45" rx="6" fill="none" stroke="var(--accent)" stroke-width="1.5" stroke-dasharray="5 4"/>
<text x="320.0" y="81.5" font-size="13" font-weight="normal" text-anchor="middle" fill="var(--accent)">Cross-Border</text>
<rect x="35" y="105" width="180" height="45" rx="6" fill="none" stroke="var(--accent)" stroke-width="1.5" stroke-dasharray="5 4"/>
<text x="125.0" y="131.5" font-size="13" font-weight="normal" text-anchor="middle" fill="var(--accent)">Instant Pay</text>
<rect x="225" y="105" width="190" height="45" rx="6" fill="none" stroke="var(--accent)" stroke-width="1.5" stroke-dasharray="5 4"/>
<text x="320.0" y="131.5" font-size="13" font-weight="normal" text-anchor="middle" fill="var(--accent)">Credit Card</text>
<rect x="460" y="20" width="420" height="140" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="670" y="40" font-size="13" font-weight="600" text-anchor="middle" fill="currentColor">DragonPay White-Label Apps</text>
<rect x="475" y="60" width="190" height="80" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="570.0" y="96.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">Recipient Claim</text>
<text x="570.0" y="111.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">(CX-01)</text>
<rect x="675" y="60" width="190" height="80" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="770.0" y="96.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">Ops & Admin</text>
<text x="770.0" y="111.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">(OX-01)</text>
<rect x="20" y="195" width="860" height="265" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="450" y="218" font-size="14" font-weight="600" text-anchor="middle" fill="currentColor">DragonPay Hub</text>
<rect x="370" y="230" width="160" height="32" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="450.0" y="250.0" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">Products (PP-01)</text>
<rect x="35" y="280" width="260" height="50" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="165.0" y="301.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">Setup & Model</text>
<text x="165.0" y="316.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">(PH-02, PH-03)</text>
<rect x="310" y="280" width="260" height="50" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="440.0" y="309.0" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">Orchestration (PH-04)</text>
<rect x="585" y="280" width="260" height="50" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="715.0" y="301.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">Parties & Risk</text>
<text x="715.0" y="316.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">(PH-05, PH-06)</text>
<rect x="35" y="340" width="260" height="50" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="165.0" y="369.0" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">Routing (PH-07)</text>
<rect x="310" y="340" width="260" height="50" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="440.0" y="361.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">Records & Cases</text>
<text x="440.0" y="376.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">(PH-09, PH-10, PH-11)</text>
<rect x="585" y="340" width="260" height="50" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="715.0" y="361.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">Comms & Reports</text>
<text x="715.0" y="376.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">(PH-12, PH-13)</text>
<rect x="370" y="480" width="160" height="45" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="450.0" y="506.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">Connector (PH-08)</text>
<rect x="250" y="560" width="400" height="110" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="450" y="580" font-size="13" font-weight="600" text-anchor="middle" fill="currentColor">Integration (CI-01)</text>
<rect x="265" y="595" width="180" height="55" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="355.0" y="626.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">Core Calls</text>
<rect x="455" y="595" width="180" height="55" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="545.0" y="626.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">CU Route Types (ACH)</text>
<rect x="265" y="700" width="180" height="45" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="355.0" y="726.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">Core Banking</text>
<rect x="455" y="700" width="180" height="45" rx="6" fill="none" stroke="currentColor" stroke-width="1.5"/>
<text x="545.0" y="726.5" font-size="13" font-weight="normal" text-anchor="middle" fill="currentColor">ACH Network</text>
<rect x="700" y="700" width="160" height="45" rx="6" fill="none" stroke="var(--accent)" stroke-width="1.5" stroke-dasharray="5 4"/>
<text x="780.0" y="726.5" font-size="13" font-weight="normal" text-anchor="middle" fill="var(--accent)">FedNow</text>
<line x1="225" y1="160" x2="225" y2="195" stroke="currentColor" stroke-width="1.5" marker-start="url(#arrow)" marker-end="url(#arrow)"/>
<line x1="670" y1="160" x2="670" y2="195" stroke="currentColor" stroke-width="1.5" marker-start="url(#arrow)" marker-end="url(#arrow)"/>
<line x1="450" y1="460" x2="450" y2="480" stroke="currentColor" stroke-width="1.5" marker-end="url(#arrow)"/>
<line x1="450" y1="525" x2="450" y2="560" stroke="currentColor" stroke-width="1.5" marker-end="url(#arrow)"/>
<line x1="355" y1="650" x2="355" y2="700" stroke="currentColor" stroke-width="1.5" marker-end="url(#arrow)"/>
<line x1="545" y1="650" x2="545" y2="700" stroke="currentColor" stroke-width="1.5" marker-end="url(#arrow)"/>
<line x1="545" y1="650" x2="730" y2="700" stroke="var(--accent)" stroke-width="1.5" marker-end="url(#arrowA)"/>
<text x="660" y="668" font-size="11" font-weight="normal" text-anchor="middle" fill="var(--accent)">via CU</text>
<line x1="530" y1="502" x2="760" y2="700" stroke="var(--accent)" stroke-width="1.5" marker-end="url(#arrowA)"/>
<text x="660" y="590" font-size="11" font-weight="normal" text-anchor="middle" fill="var(--accent)">direct</text>
</svg>
<figcaption>How the pieces fit together.</figcaption>
</figure>