Skip to main content
The Self-Service CD widget runs embedded inside Candescent OLB (see Widget Integration). The widget calls our Python backend via sdk.getHttpClient(), and the backend normalises requests and responses across seven supported banking cores so the widget always works with the same generalised schema, regardless of which core is running behind the FI. Supported cores: Finxact, FIS IBS, Corelation, Fiserv Advantage, Symitar, OSI.

Widget Entry Points

The widget is a single Module Federation remote. Internal navigation between flows is managed by React state and react-router-dom — there are no separate URLs. The FI registers one widget remote URL in Candescent admin, and the widget exposes the following named entry points via its component props.
FlowHow to Trigger
CD management (default)Widget mounts and useUserContext() resolves — shows existing CDs
Open a new CDMember selects “Open New CD” within the widget
RenewalMember selects a CD eligible for renewal from the CD list
Close & TransferMember selects a mature CD and chooses close option

Route Map

Common Routes

Route NameDescription
get_self_service_optionsLoads the initial options page
get_self_service_featuresReads the FI app configuration settings for this institution
get_user_deposit_account_listRetrieves the member’s funding accounts list
get_current_dateGets the current login date from the core

Manage CDs Routes

Route NameTypeDescription
fetch_user_available_cdsGETInitial CD flow — retrieves all CDs for the logged-in member
get_cd_ratesGETRetrieves available CD rates for renewal or new opening
account_renewalPOSTRenews a CD with a (potentially different) term
get_understand_balanceGETRetrieves balance breakdown for close-and-transfer confirmation modal
close_and_transferPOSTCloses a CD and transfers the balance to a target account

Open Account Routes

Route NameTypeDescription
account_opening_tile_informationGETReturns available account types (checking, savings, CD, …) — driven by FI configuration
get_account_type_listGETReturns rates for a selected account type
create_accountPOSTOpens a new account and initiates the fund transfer

fetch_user_available_cds — Get All CDs

Returns all CD accounts available to the logged-in member. Frontend sends:
{
  "hostAccountId": "<optional — fetch a single CD by ID>"
}
Backend sends to core:
tax_id, customer_id, customer_number, primary_cif,
account_numbers, account_group, member_numbers
Generalized response (per CD account):
FieldTypeDescription
account_numberstringInternal account identifier
user_account_numberstringDisplay account number shown to member
descriptionstringAccount product description
nick_namestring?Member-defined account nickname
account_typestringAccount type code (e.g., CDA)
sub_account_typestringSub-type / product code
share_idstringShare/position ID used in core calls
interest_ratenumberAnnual interest rate
apynumberAnnual Percentage Yield
maturity_datestringMaturity date (ISO 8601)
formatted_maturity_datestringMaturity date formatted for display
next_maturity_datestringCalculated next maturity date
balancenumberAvailable balance
current_balancenumberCurrent ledger balance
closing_balancenumberBalance used for close-and-transfer
accrued_interestnumber?Interest accrued to date
is_account_activebooleanWhether the account is open and active
is_cd_in_grace_periodboolean?Whether the CD is in its post-maturity grace window
is_eligible_for_renewalbooleanWhether the member can renew this CD
is_eligible_for_closebooleanWhether the member can close this CD
is_eligible_for_openbooleanWhether additional opening is permitted
host_acct_idnumberHost system account ID (used in POST operations)
position_td_idstringTD position ID (used for renew with different terms)
roll_prodstringConfigured rollover product code
routing_numberstringRouting number for external transfers

Core Mappings — fetch_user_available_cds

Finxact — two calls: get all accounts by customer_id, then get account details by account_number. Key response fields: acct_bk.acctNbr, posn_dep._Id, posn_depTd.maturityDtm, posn_depTd.nextMaturityDtm. FIS IBS — two calls: get all accounts by tax_id, then get CD detail by account_number. Response fields use dpAcctNbr, dptdCurBal, dptdNxtMat, dptdCurIntRte. Corelation — takes member_numbers + account_numbers. Response maps serialaccount_number, maturityDate, balance, closeDate (null = active account), maturityPeriod → term. Fiserv Advantage — takes account_numbers + institution_number. Response maps AcctKeys.AcctId, DepositAcctInfo.MaturityDt, DepositAcctInfo.AcctDtlStatus.

get_user_deposit_account_list — Funding Accounts

Returns all eligible source accounts a member can use to fund a CD. No core call is made — account data is fetched directly from Account Management using the Q2 account list already loaded at session start. Generalized response (per funding account):
FieldTypeDescription
account_numberstringMasked account number
unmasked_account_numberstringFull account number (server-side only)
account_descstringDisplay description / nickname
account_balancenumberAvailable balance
is_external_accountbooleantrue for ACH / external accounts
routing_numberstring?ABA routing number (external accounts)
host_acct_idnumberHost system account ID
type_of_accountstringProduct code (hydra_product_code)
acct_typestringNormalized type (checking, savings, etc.)
user_account_numberstringUser-facing account number
member_numberstringMember number

get_cd_rates — Available CD Rates

Returns available terms and rates for CD renewal or new CD opening. Backend sends to core: account_type Generalized response (per rate option):
FieldTypeDescription
descriptionstringProduct name / description
account_typestringAccount type code
sub_account_typestringSub-type / product code used in renewal/opening POST
interest_ratestringRate as formatted decimal string
annual_yieldnumberAPY
termstringHuman-readable term (e.g., "12 M", "18 M")
minimum_balancenumberMinimum opening balance
prod_groupstring?Product group (Finxact)

Core Mappings — get_cd_rates

Finxact — input: account type (ifxAcctType) + product name. Rate look-up key: Deposit+{term}. FIS IBS — input: product_id. Returns plan Nbr, MatTerm, MatTermID, interest_rate, annual_yield. Corelation — three chained calls: get_sub_share_serial_list(account_type)get_sub_share_type_list(serials)get_min_balance(serials). Returns share_id, sub_share_type, filtered_term. Fiserv Advantage — input: institution_number + sub_account_type. Returns APY1, Rate1, ProductNumber, term details, deposit_rate_index. Symitar — returns ranged terms (e.g., "12 - 17 Months") with a term_list array of individual month values.

account_renewal — Renew a CD (POST)

Renews a CD at a new term and rate. Frontend → Backend fixed payload:
{
  "accountNumber":       "<from fetch_user_available_cds>",
  "term":                "<from get_cd_rates>",
  "renewSubAccountType": "<from get_cd_rates>",
  "interestRate":        "<from get_cd_rates>",
  "apy":                 "<from get_cd_rates>",
  "shareId":             "<from fetch_user_available_cds>",
  "maturityDate":        "<from fetch_user_available_cds>",
  "renewAccountType":    "<from fetch_user_available_cds>",
  "hostAccountIds":      ["<host_acct_id>"],
  "accountIds":          ["<account_number>"]
}
Extra body from FI app configuration (institution-specific):
"EXTRA_ROUTE_BODY": {
  "interestPlan":    "selectedCurrentRate-interest_plan",
  "lastMaturityDate":"selectedCDDetails-last_maturity_date"
}
Backend extra parameters from FI app configuration:
"BE_EXTRA_PARAMS": {
  "interest_plan":     { "field": "interestPlan" },
  "is_immediate_change":{ "default": true }
}
Response displayed to member:
FieldFormatDescription
account_numberstringRenewed account number
effective_dateMM/DD/YYYYRenewal effective date
interest_ratenumberNew interest rate
apynumberNew APY
descriptionstring?Renewal term description

Core Mappings — account_renewal

Finxact — extra inputs: renew_sub_account_type, td_vn_value. Returns renewed_sub_account_type. FIS IBS — inputs: account_number, term, old_maturity_date, share_id. Returns new account_number, share_id, renew_term, renew_term_frequency, new_maturity_date, interest_rate. Fiserv Advantage — inputs: institution_number, account_number, account_type, product_number, Maturity_date, classcode, term, term_code, Ratechangedt, Depositrateindex, Schedulerate.

close_and_transfer — Close CD & Transfer (POST)

Closes a mature CD and transfers the balance to a designated internal or external account. Frontend → Backend fixed payload:
{
  "fromAccountNumber":  "<from fetch_user_available_cds>",
  "fromAccountShareId": "<share_id>",
  "toAccountNumber":    "<user_account_number or unmasked_account_number>",
  "toAccountShareId":   "<account_id>",
  "isExternalAccount":  false,
  "fundAmount":         "<total_balance>",
  "toAccountType":      "<type_of_account>",
  "fromAccountType":    "<account_type>",
  "toAccountDesc":      "<account_desc>",
  "routingNumber":      "<aba_routing (external only)>",
  "hostAccountIds":     ["<host_acct_id>"],
  "accountIds":         ["<account_number>"]
}
Response displayed to member:
FieldFormatDescription
effective_dateMM/DD/YYYYTransfer effective date
to_account_numberstringDestination account number
from_account_numberstringSource (closed) CD number
transferred_amountnumberTotal amount transferred

Core Mappings — close_and_transfer

Finxact — three calls: Get or set interest position → Fund transfer → Close reason. Inputs include td_id, round_opt, from/to account details, customer_id, fund_amount, routing_number, bank_name. FIS IBS — one call: Fund transfer. Inputs: from_account_number, from_account_share_id, to_account_number, fund_amount. Returns fmTrsfrFromAcct, fmTrsfrToAcct, fmTrsfrAmt. Fiserv Advantage — inputs: from_account, from_account_type, to_account, to_account_type, fund_amount, cda_transaction_code, transaction_code, description.

create_account — Open a New Account (POST)

Opens a new checking, savings, or CD account and initiates the initial fund transfer. Frontend → Backend fixed payload:
{
  "fromAccountNumber": "<user_account_number>",
  "fromAccountShareId":"<share_id>",
  "fundAmount":        "<funding amount entered by member>",
  "term":              "<from get_account_type_list>",
  "accountType":       "<from funding account>",
  "subAccountType":    "<from get_account_type_list>",
  "autorenewal":       true,
  "isDividendSameAccount": true,
  "dividendToAccount": "<target account for dividends>"
}
Response displayed to member:
FieldFormatDescription
account_numberstringNewly created account number
from_account_numberstringFunding source account number
fund_amountnumberAmount transferred in
maturity_datestringCD maturity date (if applicable)

Core Mappings — create_account

Finxact — fund transfer call. Same inputs as close_and_transfer: td_id, from/to account details, customer_id, fund_amount, routing_number. FIS IBS — one call: Fund transfer with from_account_number, from_account_share_id, to_account_number, fund_amount. Corelation — inputs: member_number, share_id, opening_balance, auto_renewal, is_dividend_to_same_account, dividend_transfer_to_share_serial, from_share_serial, fund_amount. Returns new account_number formatted as {member_number}-{share_id}, fund_amount, from_account_number, maturity_date.

get_understand_balance — Balance Breakdown

Returns the detailed balance breakdown shown in the “Understand Your Balance” modal before a member confirms a close-and-transfer. This helps the member understand the exact amount that will be disbursed including accrued interest. The modal displays principal, accrued interest, early withdrawal penalty (if any), and the final disbursement total.

FI App Configuration

Each institution that deploys the Self-Service CD app requires a per-FI JSON configuration object. This configuration controls which features are enabled, what labels and copy are displayed, how extra parameters flow between the front end and the banking core, and UI theme tokens. It is provided during onboarding and stored server-side — it is never exposed to the member’s browser. Key configuration sections:
SectionPurpose
SELF_SERVICE_FEATURESTop-level feature flags and display settings
MANAGE_CERTIFICATESControls for the CD management flow (renewal, close)
OPEN_ACCOUNT_FEATURESControls for the account opening flow
EXTRA_ROUTE_BODYExtra fields sent from the front end to the back end in POST requests
BE_EXTRA_PARAMSMaps additional back-end-to-core fields, with static defaults or dynamic field mapping
FINAL_MODAL_PROPSFields displayed in the post-transaction success modal
THEME_COLORSPrimary, secondary, and tertiary color tokens
Field mapping syntax:
"BE_EXTRA_PARAMS": {
  "prop_name": { "field": "keyFromFrontend" },
  "prop_name": { "default": "staticValue" }
}
If the value comes from the front end, use "field". If it is a static value applied to all transactions for this institution, use "default". Source key prefixes used in EXTRA_ROUTE_BODY / BE_EXTRA_PARAMS:
PrefixSource Route
selectedCDDetails-Data from fetch_user_available_cds
selectedAccount-Data from get_user_deposit_account_list
selectedCurrentRate-Data from get_cd_rates
choosenAccountDetails-Selected account type from get_account_type_list
payload-Value from the POST response payload