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
| Menu | Page / meaning | Entity · table | Worth knowing |
|---|---|---|---|
| Send cards | The order wizard: pick program, offers, recipients. | Order · orders + orderproducts | "Cards", "offers", and "products" all mean products in this flow. Submitting creates one order. |
| Sponsors | Client organizations. | Organization · organizations | The portal says Sponsor. The code and DB say Organization. Same thing, always. |
| Parent companies | Groups of organizations. | ParentCompany · parentcompanies | 15 rows. |
| Referrals | Attribution tags for how an org found us. | Referral · referrals | 9 rows. Set at org signup or edit. No commission fields; pure attribution, filterable in reports. |
| Contracts | Signed org agreement files. | CommercialAgreement · commercialagreements | A file registry (URL, date signed, status), org-level. Program-level twin: programproposals. Upload lives on the Sponsor edit page. |
| Recipients | The people who receive benefits. | Member · members | The portal says Recipient. Everything else says Member. |
| Groups | Recipient cohorts inside an org. | MembersGroup · membergroups | Page header "Recipients Groups". |
Program manager, Product setup
| Menu | Page / meaning | Entity · table | Worth knowing |
|---|---|---|---|
| Programs | Page "Custom Programs": one client benefit. Full page. | Program · programs | Bridge Admin list filters FeatureType=original. Org admins get a separate plain "Programs" item. 345 rows. |
| Networks | Named retailer sets where a program's cards work. | Network · networks + retailer_x_network | 66 rows. Inclusion offers → full network; exclusion → InComm Full Minus Walmart. |
| Self-enrollment link | Generates a signup URL + QR for a program. | no entity | Composes org + program + product + user into a link. No table of its own. |
| Products | Sellable wrappers around offers/promos. Full page. | Product · products | CardIssuer decides InComm vs Walmart. 886 rows. |
| Recurring products | Page "Create Advanced Offer": composites (either/or, cadences). | Product (ProductType=advanced) · children in groupedproducts | Three names, one concept: menu "Recurring products", page "Advanced Offer", code "advanced product". Scheduled sends live in groupedproductlogs. |
| Product category | Display grouping for products. | ProductCategory · productcategories | 9 rows. Cosmetic. |
Card management, Orders
| Menu | Page / meaning | Entity · table | Worth knowing |
|---|---|---|---|
| Cards | One clip of one offer to one recipient. Full page. | Card · cards | 564k rows. AccountId = ingenId, Number = PAN, wallet = shared VerificationCode. |
| Activity | Page "Transactions" (Bridge Admin) or "Redemptions" (org). Card events. | CardEvent · cardevents | One 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. |
| Orders | Page "Previous Orders": one send of products to a recipient. | Order · orders + orderproducts | The only card-to-program bridge: cards → orderproducts → orders → ProgramId. |
| Schedule orders | Page "Scheduled Orders": future-dated sends. | Order with isScheduled=true | Same table as Orders. Appears twice in the menu (CRM for orgs, Admin for Bridge Admins). |
Manage credits, Billing
| Menu | Page / meaning | Entity · table | Worth knowing |
|---|---|---|---|
| Manage credits (org) | Credit balance of prefunded programs. | Program + prefunding Invoice | Only shown when the org has a PaymentType=prefunded program. Reads invoices with invoiceType=prefunding. No "credits" entity exists. |
| Program balances | Per-program available balance + adjust + activity ledger. | Program columns + ProgramBudgetTransaction · programbudgettransactions | Balance 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). |
| Invoices | Org/program invoices. | Invoice · invoices | Stripe-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. | none | Opens 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
| Menu | Page / meaning | Entity · table | Worth knowing |
|---|---|---|---|
| Walmart promos | Page "Promo Codes": Walmart-issued credit identifiers. | PromoCode · promocodes | 14 rows. products.PromoCode stores the Identifier column. |
| Incomm offers | The numbered benefit contracts. Full page. | IncommOffer · incommoffers | 205 rows. Number is the universal join key. Value in cents. |
| Catalogs | Page "Incomm Catalogs": UPC lists scoping offers. | IncommCatalog · incommcatalogs + incommcatalogitems | 111 catalogs, 14.9M items. We push to InComm; the reverse sync is a manual admin action, so drift is possible. |
| Banners | Retail brands. | Retailer · retailers | 85 rows. The UI, one export API, and the offer join table say Banner; CRUD and the DB say Retailer. |
| Assets | Uploaded images/files used by the portal. | Asset · assets | ~180 rows. |
| Card templates | The HTML/CSS/JS card UX recipients see. | CardTemplate · cardtemplates | 23 rows. Programs point at one via CardTemplateId. |
| Marketplaces | Defunct. Programs that published products to others. | Program filtered MarketplaceType=owner | We 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 Cards | Page "Physical Card Orders": the plastic print/ship queue. | PhysicalCardOrder · physicalcardorders | 3.9k rows. Order types new, resend, replace. Batches go to the print vendor via printservicefiles. |
| KPIs | Per-program KPI table (activation, utilization, avg times). | ProgramKpi (computed) | No storage. Computed on demand from programs, cards, cardevents. |
| User management | Page "Users": portal logins and roles. | User · aspnetusers | ASP.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)
| Surface | What it is | Backing |
|---|---|---|
| Wallet / card UI | What 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 scanner | Barcode 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-separatedincommcatalogs.Taglist (split before joining).membereligibilities.ExternalId=members.ExternalId(no MemberId column).