iQpay Internal

Reference

Concept map

Every item in the portal sidebar, in the exact order a Bridge Admin sees it, mapped to its code entity and database table. When the portal, the code, and the database use different names, all of them are here.

ℹ️
How to read this page.

Menu = the sidebar label. Page = the page's own title when it differs. Entity = the code class in Bridge.API-V2. Table = MySQL safety_prod. Verified against the frontend menu definition, the API, and the production schema, 2026-07-30. Items marked org appear only for organization roles.

Send cards, CRM, Accounts

MenuPage / meaningEntity · tableWorth knowing
Send cardsThe order wizard: pick program, offers, recipients.Order · orders + orderproducts"Cards", "offers", and "products" all mean products in this flow. Submitting creates one order.
SponsorsClient organizations.Organization · organizationsThe portal says Sponsor. The code and DB say Organization. Same thing, always.
Parent companiesGroups of organizations.ParentCompany · parentcompanies15 rows.
ReferralsAttribution tags for how an org found us.Referral · referrals9 rows. Set at org signup or edit. No commission fields; pure attribution, filterable in reports.
ContractsSigned org agreement files.CommercialAgreement · commercialagreementsA file registry (URL, date signed, status), org-level. Program-level twin: programproposals. Upload lives on the Sponsor edit page.
RecipientsThe people who receive benefits.Member · membersThe portal says Recipient. Everything else says Member.
GroupsRecipient cohorts inside an org.MembersGroup · membergroupsPage header "Recipients Groups".

Program manager, Product setup

MenuPage / meaningEntity · tableWorth knowing
ProgramsPage "Custom Programs": one client benefit. Full page.Program · programsBridge Admin list filters FeatureType=original. Org admins get a separate plain "Programs" item. 345 rows.
NetworksNamed retailer sets where a program's cards work.Network · networks + retailer_x_network66 rows. Inclusion offers → full network; exclusion → InComm Full Minus Walmart.
Self-enrollment linkGenerates a signup URL + QR for a program.no entityComposes org + program + product + user into a link. No table of its own.
ProductsSellable wrappers around offers/promos. Full page.Product · productsCardIssuer decides InComm vs Walmart. 886 rows.
Recurring productsPage "Create Advanced Offer": composites (either/or, cadences).Product (ProductType=advanced) · children in groupedproductsThree names, one concept: menu "Recurring products", page "Advanced Offer", code "advanced product". Scheduled sends live in groupedproductlogs.
Product categoryDisplay grouping for products.ProductCategory · productcategories9 rows. Cosmetic.

Card management, Orders

MenuPage / meaningEntity · tableWorth knowing
CardsOne clip of one offer to one recipient. Full page.Card · cards564k rows. AccountId = ingenId, Number = PAN, wallet = shared VerificationCode.
ActivityPage "Transactions" (Bridge Admin) or "Redemptions" (org). Card events.CardEvent · cardeventsOne page, one endpoint, two titles by role. Redemptions (org) is literally a re-export of the same component. Only the Excel export differs: the redemption export filters to Purchase, Return, Void.
OrdersPage "Previous Orders": one send of products to a recipient.Order · orders + orderproductsThe only card-to-program bridge: cards → orderproducts → orders → ProgramId.
Schedule ordersPage "Scheduled Orders": future-dated sends.Order with isScheduled=trueSame table as Orders. Appears twice in the menu (CRM for orgs, Admin for Bridge Admins).

Manage credits, Billing

MenuPage / meaningEntity · tableWorth knowing
Manage credits (org)Credit balance of prefunded programs.Program + prefunding InvoiceOnly shown when the org has a PaymentType=prefunded program. Reads invoices with invoiceType=prefunding. No "credits" entity exists.
Program balancesPer-program available balance + adjust + activity ledger.Program columns + ProgramBudgetTransaction · programbudgettransactionsBalance state = programs.TotalCurrentBalance; every movement is an append-only row, and "Adjust Balance" writes two offsetting rows. Available balance also subtracts terms from the programbudgetoffersvalues rollup (one row per program).
InvoicesOrg/program invoices.Invoice · invoicesStripe-integrated (Stripe id, PDF, hosted URL). 1.4k rows, 9 statuses (paid, generated, open, ...). Payments land in payments + paymenttransactions (ACH attempts).
Payment management (org)One button.noneOpens the org's Stripe customer portal. Nothing is stored on our side. The paymentmethods table (BlueSnap vaulting) exists but is empty and unused; /payments/list is a 7-line stub page.

Issuers, Admin

MenuPage / meaningEntity · tableWorth knowing
Walmart promosPage "Promo Codes": Walmart-issued credit identifiers.PromoCode · promocodes14 rows. products.PromoCode stores the Identifier column.
Incomm offersThe numbered benefit contracts. Full page.IncommOffer · incommoffers205 rows. Number is the universal join key. Value in cents.
CatalogsPage "Incomm Catalogs": UPC lists scoping offers.IncommCatalog · incommcatalogs + incommcatalogitems111 catalogs, 14.9M items. We push to InComm; the reverse sync is a manual admin action, so drift is possible.
BannersRetail brands.Retailer · retailers85 rows. The UI, one export API, and the offer join table say Banner; CRUD and the DB say Retailer.
AssetsUploaded images/files used by the portal.Asset · assets~180 rows.
Card templatesThe HTML/CSS/JS card UX recipients see.CardTemplate · cardtemplates23 rows. Programs point at one via CardTemplateId.
MarketplacesDefunct. Programs that published products to others.Program filtered MarketplaceType=ownerWe no longer use the marketplace concept. The pages and legacy rows remain (subscribers page = same table filtered subscriber; join tables programmarketplaces, programmarketplaceproducts). Do not build new ones.
Physical CardsPage "Physical Card Orders": the plastic print/ship queue.PhysicalCardOrder · physicalcardorders3.9k rows. Order types new, resend, replace. Batches go to the print vendor via printservicefiles.
KPIsPer-program KPI table (activation, utilization, avg times).ProgramKpi (computed)No storage. Computed on demand from programs, cards, cardevents.
User managementPage "Users": portal logins and roles.User · aspnetusersASP.NET Identity tables, 159 users. Roles: Bridge Admin, Organization Admin, Organization AP Contact, Organization User. A user administers; a member spends.

Member-facing surfaces (no menu entry)

SurfaceWhat it isBacking
Wallet / card UIWhat recipients open from their text or email.cards grouped by VerificationCode; rendered via cardtemplates.
Activation flows/activate, /activate-either-or, claim codes.cardactivationclaims; either/or choice resolves the advanced product's children.
Wallet scannerBarcode eligibility preview in the wallet.Public API → the multi-offer scanner path. It is a preview, not the register's decision. See Inclusion vs exclusion.

Built but not live

  • messagedeliveries / messagedeliveryattempts: new unified outbound-messaging tables, 0 rows so far.
  • balanceadjustments, invoicefees: newer billing ledger tables, 0 rows.
  • paymentmethods (BlueSnap vaulting): 0 rows; Stripe won.

The joins that are not foreign keys

Memorize these three. Every reporting mistake traces back to one of them:

  • cards.OfferNumber = incommoffers.Number (varchar, no FK).
  • incommoffers.PrimaryCatalog = comma-separated incommcatalogs.Tag list (split before joining).
  • membereligibilities.ExternalId = members.ExternalId (no MemberId column).
iQpay internal. Do not share outside the company.