Overview
The team fees system handles the complete payment lifecycle — from creating an offline/manual fee batch and defining what families owe, through recording cash, check, bank transfer, or other offline payments, to tracking every recipient's current balance and status. The current team-fees.html create flow is manual/offline collection only: admins create a batch, select roster recipients, save unpaid fee records with offline instructions, then record payments from the manage view as families settle balances.
Admins can add an optional list of line items that itemize how the total is broken down, and an optional installment schedule that divides the total into multiple payments with individual due dates. Once a fee record exists, recipients (typically team families) immediately see it in their parent dashboard as an invoice-style view with the offline instructions. A parent Pay button appears only for fee records that were specifically created as online Stripe collection fees (collectionMode: online_stripe) and still have an unpaid balance.
Admins can also record offline payments (cash, check, bank transfer) directly on the fee record as manual ledger entries, apply positive or negative balance adjustments with a required reason field for audit purposes, and cancel fee records for individual recipients. All of these actions update the recipient's balance and status in real time. Parents only ever see their own fee records — no family has visibility into another family's payment status, amounts owed, or adjustment history.
In This Article
- Creating a fee record with recipients and optional line items
- Setting up installment schedules with due dates and amounts
- Creating the default offline/manual fee batch and selecting recipients
- When online Stripe collection is available and how Pay online is gated
- Recording offline payments and balance adjustments
- Canceling a fee for a specific recipient
- Parent invoice view: what they see, when the Pay button appears
- Fee recipient status states: Paid, Unpaid, Partial, Canceled
Who Is This For
Admins are responsible for the full fee management workflow. An admin creates offline/manual fee records, sets the recipient list, defines optional line items and installment schedules, records offline payments when families pay by cash or check, applies manual balance adjustments (discounts, corrections, late fees, scholarship credits), cancels fees for individual recipients, and monitors per-recipient payment status across the whole team. Admins see all fee records and all recipient details — there is no financial detail that is hidden from the admin role. This role handles every task described in the admin sections of this guide.
Coaches may have visibility into fee status depending on the team's access level configuration. Coaches with admin access can perform all admin tasks. Coaches without admin access can typically view aggregate payment status for their team — useful for knowing whether families have outstanding balances before a tournament — but they cannot create fees, record payments, or apply adjustments. If a coach needs to manage fees directly, they should be granted admin access by the team owner. When in doubt, defer fee management tasks to the designated admin.
Parents have a read-only view of their own fee records. In the parent dashboard, they can see each fee assigned to their player: the fee name, total amount, amount already paid, remaining balance, all line items with labels and amounts, the full installment schedule with per-installment due dates and paid/unpaid status, and the team's offline payment instructions. The Pay button appears only for online Stripe fee records with an unpaid balance — it does not appear for manual/offline fee records, stale checkout URLs, fees that are already fully paid, or canceled fees. Parents cannot see any other family's fee information.
Prerequisites
- Admin access on the team is required to create fees, record offline payments, apply adjustments, or cancel fees. Team owners have admin access by default. Coaches can be granted admin access by the owner.
- The current
team-fees.htmlcreate flow is manual/offline collection only. It saves unpaid recipient records withcollectionMode: offline_manual; it does not create Stripe checkout, email, push, or SMS collection workflows. - Online payment via Stripe is conditional. Stripe must be enabled for your organization and the fee record must be an online Stripe collection fee before parents see a Pay online action.
- Parents must be linked to the team to see fee records in their dashboard. A parent account must have the team listed in their linked parent team IDs. If a parent cannot see a fee, check their team linkage first.
- For recording offline payments or applying adjustments, the fee record must already exist. You cannot record a payment for a fee that has not been created yet.
Choose Your Path
1. Create a new offline/manual fee batch for roster recipients
Use this path when you are setting up a new fee for the season — registration, uniform costs, tournament fees, or any other team expense. You will create the offline/manual fee batch, select players or families from the roster, optionally itemize with line items, save unpaid records, and give families the offline instructions they need to pay by cash, check, bank transfer, or another team-approved method.
2. Set up installments so payments are spread over time
Use this path when the total fee is large enough that you want to allow families to pay in multiple installments over time — for example, splitting a $200 annual registration into four $50 payments due monthly. Configure the installment schedule when creating the fee so parents can see the expected due dates and amounts. In the default offline/manual flow, the schedule is informational and admins record each offline payment as it is received.
3. Record that a parent paid offline
Use this path when a family hands you cash or a check at practice, pays by bank transfer, or settles their balance in any way that does not go through Stripe. Open their fee record, record an offline payment entry with the amount and a description, and their balance and status will update immediately.
4. Apply a balance adjustment
Use this path to apply a discount (negative adjustment), add a late fee or extra charge (positive adjustment), or correct a data entry error in the original fee amount. All adjustments require a written reason that becomes part of the audit trail. Common uses include early-payment discounts, scholarship credits, and corrections for previous recording errors.
5. Cancel a fee for a specific recipient
Use this path when a family should no longer owe a particular fee — because the player left the team, received a full scholarship, or the fee was created for them in error. Canceling the fee removes the outstanding balance from their parent dashboard view and marks the record as Canceled rather than Unpaid.
6. Parent asks why Pay online is not showing
Use this path when walking a parent through their invoice or troubleshooting why the Pay button is not appearing. For manual/offline fees created from team-fees.html, parents should follow the offline instructions shown on the fee. Pay online appears only when the fee is an online Stripe collection record with an unpaid balance.
Step-by-Step Workflow
Admin: Creating and managing fees
- Create the offline/manual fee batch. Go to your team's admin panel and open the Fees section. Click New Fee. Enter a clear fee name that parents will recognize (for example, Spring 2026 Registration or Tournament Travel Fee — June) and an optional description that provides more context. Set the total amount for the fee. This total is the amount a single recipient owes — not a team aggregate. Add recipients by selecting players or families from the roster. Each recipient gets their own independent fee record with their own status and balance. You can add all team families at once or select a subset. Once saved, the fee immediately appears in each recipient's parent dashboard.
- Add line items (optional). Line items let you break the total into labeled components so parents understand what they are paying for. For example, a $150 registration fee might break down into Uniform: $45, League Registration: $80, and Insurance: $25. Click Add Line Item for each component, enter a label and amount, and confirm that the line item amounts sum to the fee total. Line items are displayed in the parent's invoice view as a formatted list — this transparency reduces the number of questions you receive from families about what the fee covers.
- Set an installment schedule (optional). If you want to allow families to pay over time, add installment entries. Each installment has three fields: a label (for example, First Installment), an amount (for example, $75), and a due date (for example, April 1, 2026). Add as many installments as you need. The installment amounts should sum to the fee total. Parents see the full installment schedule in their invoice view, including which installments are due, which are overdue, and which have been paid. Note that installment schedules are informational by default — they show parents when payments are expected, but the current offline/manual create flow does not automatically generate Stripe links for installments.
- Save the offline/manual fee records. Before saving, review the recipient list, fee total, line items, installment schedule, and offline instructions carefully. Once you save, each recipient gets an unpaid fee record with manual/offline collection mode and can see the fee in their parent dashboard. Confirm that the total amount is correct — changing the total after parents have already made partial payments requires using a manual adjustment to correct the balance, which creates an audit trail entry. It is much cleaner to get the amount right at creation time.
- Record offline payments from the manage view. When families pay by cash, check, bank transfer, or another offline method, open the fee management view and record the payment on the recipient's fee record. The payment entry updates the paid amount, remaining balance, and status while preserving a written ledger entry for the admin audit trail.
- Monitor payment status. In the fee management section, open any fee record to see a per-recipient status table. Each recipient shows their current status badge, the amount paid so far, and the remaining balance. Status values are: Unpaid (no payment received), Partial (some amount received but balance remains), Paid (full balance received), and Canceled (fee has been canceled for this recipient). Status updates when admins record offline payments or adjustments. For online Stripe collection fees, status also updates when Stripe confirms a completed payment. Use this view to follow up with families who have outstanding balances as due dates approach.
- Record an offline payment. When a parent pays by cash, check, or any method outside of Stripe, select the recipient's fee record and choose Record Offline Payment (or Add Adjustment with type set to Offline Payment). Enter the amount received and write a description that will serve as the record of the transaction — include details such as the payment method and the date received (for example, Cash received at practice, May 3 2026, $75). The description field is required. Once saved, the paid amount on the fee record increases by the amount entered, the remaining balance decreases accordingly, and the status updates from Unpaid to Partial or Paid depending on whether the full balance has been covered.
- Apply a manual balance adjustment. Use Add Adjustment with type set to Manual Adjustment for any situation that does not fit the standard payment flow. Enter a positive amount to credit the recipient's account (reducing what they owe) or a negative amount to add a charge (increasing what they owe). A reason is required for every adjustment — write a clear explanation that you or another admin will be able to understand months from now. Example reasons: 10% early-payment discount applied, Partial scholarship — board approved 2026-04-15, Correction: previous entry overstated amount by $20, Late registration surcharge per team policy. These reasons are stored on the fee record and constitute the audit trail for any financial discrepancies.
- Cancel a fee for a recipient. Open the recipient's fee record and choose Cancel Fee. Add a reason note explaining why the fee is being canceled. Once canceled, the fee status changes to Canceled and the outstanding balance is removed from the parent's invoice view — it no longer appears as money owed. Canceled fees remain visible in the admin fee management view for record-keeping purposes. You cannot uncancelce a fee — if you cancel in error, create a new fee record for that recipient.
Parent: Viewing and settling a fee
- Open the parent dashboard and navigate to Fees. Log in to your ALL PLAYS account and open the parent dashboard for your team. Look for the Fees section or tab — this may appear as a card on the dashboard home or as a dedicated section within the team view. Each fee that the admin has created for your player appears here with the fee name and a status badge. You only see fees assigned to your player — no other family's fees are visible to you.
- Expand a fee to see the full invoice detail. Tap or click the fee card to expand it. The expanded view shows the invoice-style breakdown: the total amount owed, the amount you have already paid (zero if this is your first payment), the remaining balance, all line items with their labels and amounts, and the installment schedule if one has been set up. Each installment in the schedule shows its label, amount, due date, and whether it has been paid. If the admin has added any notes to your fee record, they appear here as well. Read through this information before paying so you know exactly what the payment covers.
- Follow the payment instructions shown on the fee. For fees created through the current team fee create flow, the fee is manual/offline and does not show a Pay online button. Follow the offline instructions from your team admin, then the admin records the payment after it is received. The Pay button appears only when the fee is an online Stripe collection record with an unpaid balance. If you believe your organization supports online fee collection but Pay is missing, contact your team admin to confirm whether this specific fee was created for online Stripe collection.
- If Pay online is available, complete Stripe checkout. On Stripe's checkout page, enter your payment details (card number, expiration, CVC, and billing information). Stripe's checkout is fully hosted by Stripe — ALL PLAYS never sees or stores your payment card details. Review the amount shown on the Stripe page before confirming; it should match the fee total or the installment amount configured for this link. Click Pay on the Stripe page to submit the payment. On a successful payment, Stripe sends a confirmation webhook back to ALL PLAYS, which updates your fee record within a few seconds. Your fee status changes to Paid or Partial depending on whether the full balance has been covered. If your payment fails or you close the Stripe page without completing the payment, your fee status remains unchanged — contact your admin if you cannot complete payment through Stripe.
Advanced: Online Stripe fee collection
Use this section only if your organization has online Stripe fee collection enabled and the fee record is specifically created with collectionMode: online_stripe. This is not the default path for fees created from team-fees.html.
- Generate a Stripe Checkout link for an online Stripe fee. From an eligible online collection fee record, click Generate Payment Link. The system calls a server-side function that creates a Stripe Checkout session using the fee amount stored on the record. The resulting Stripe-hosted URL is stored on the fee record. Important: the amount used for the Stripe session is taken from the fee record at the time the link is generated. If you subsequently edit the fee amount before any payments are made, generate a new link — the old link will charge the old amount.
- Share the payment link or let parents access it from their dashboard. You can copy the Stripe URL from the online fee record and share it directly with families via team chat, email, or text message. Alternatively, parents can access the Pay button directly from their parent dashboard when the fee is an online Stripe collection record with an unpaid balance.
- Use installments as optional invoice detail. Line items and installments can explain what the fee covers and when payments are expected. If your online Stripe setup supports collecting installment-sized amounts, generate the appropriate checkout link when that installment is ready to collect.
Common Questions
What if an online Stripe session expires before the parent completes checkout?
For online Stripe fee records, Stripe Checkout sessions expire after a set period of inactivity (typically 24 hours, but this depends on the session configuration). If a session expires, the parent is no longer able to use that checkout link and the fee status remains Unpaid. The admin must generate a new Stripe Checkout link from the eligible online fee record and either share it directly with the parent or let them access it again through the Pay button on their dashboard. No partial credit is applied for expired sessions — expiry is a clean reset.
Can a parent pay individual installments separately?
Yes, if the team accepts installment payments. In the default offline/manual flow, the installment schedule tells parents what is due and when, and the admin records each offline payment as it is received. If your organization has online Stripe collection enabled for that fee, a Stripe Checkout link may be sized to a specific installment amount instead of the full fee total.
Can I edit a fee after parents have already paid part of it?
Line item labels and the fee description can be edited at any time without affecting balances. However, if you need to change the fee total after partial payments have already been recorded, do not edit the total directly — instead, use a manual adjustment to bring the balance to the correct amount. For example, if the original fee was $200, a parent paid $100, and you discover the fee should have been $180, record a negative $20 adjustment with the reason "Correction: fee total reduced." This preserves the payment history and produces a clear audit trail rather than silently changing the original amount.
Does the admin see when a parent views their invoice?
No. The admin only sees payment status changes — when the status moves from Unpaid to Partial or Paid, or when an offline payment is recorded. There is no read-receipt or view-tracking for invoice views. If you need to know whether a parent is aware of a fee, follow up with them directly through team chat or email.
Can I create a fee for all team families at once?
Yes. When creating a fee record, add all active roster members as recipients at once. Each recipient gets their own independent fee record from that point forward — if one parent pays and another does not, their statuses are tracked completely independently. This is the standard approach for team-wide fees like registration and uniform costs.
How does Stripe know the correct amount to charge for online fees?
For online Stripe fee records, the server-side function that creates the Stripe Checkout session reads the fee amount from the fee record in Firestore at the moment the Generate Payment Link button is clicked. The amount is baked into the Stripe session at creation time. If you edit the fee amount after generating the link, the existing Stripe link will still charge the original amount — you must generate a new link to pick up the updated amount. Always confirm the fee total is correct before generating the Stripe link.
What does "Partial" status mean?
Partial means that at least one payment has been received and applied to the fee, but the total received so far is less than the full amount owed. For example, if the fee total is $150 and a parent has paid $75 (either recorded offline or, for an online Stripe fee, paid through Stripe), the status is Partial and the remaining balance shows $75. A Partial fee is treated as still outstanding. The Pay button remains visible only when the fee is an online Stripe collection record with remaining balance. The status changes to Paid only when the remaining balance reaches zero.
Can I remove a recipient from a fee after creating it?
The standard approach is to cancel the fee for that recipient using the Cancel Fee option on their record. This sets their status to Canceled and removes the outstanding balance from their parent dashboard. It does not delete the fee record — the canceled record remains in the admin view for record-keeping. If the recipient was added in error and has made no payments, canceling is the cleanest approach. There is no "remove recipient" option that deletes the record entirely.
Recovery and Troubleshooting
Pay button is not showing for the parent
First confirm whether the fee is manual/offline or online Stripe. Fees created from the current team-fees.html create flow are manual/offline and should not show Pay online. For Pay to appear, the fee must be an online Stripe collection record, have an unpaid balance, and have enough checkout context to open Stripe. If those conditions are met and the parent still does not see the button, ask them to do a hard reload of the dashboard page (Ctrl+Shift+R on Windows/Linux, Cmd+Shift+R on Mac) to clear any cached page state.
Stripe session expired before the parent completed checkout
For an eligible online Stripe fee record, generate a new Stripe Checkout link from the fee record admin panel by clicking Generate Payment Link again. The new link replaces the old one on the fee record. If the parent was using the direct URL you shared earlier, share the new URL with them as well. The parent can also access the new link through the Pay button on their dashboard when the fee still has an unpaid balance.
Payment was processed in Stripe but fee status still shows Unpaid
Stripe webhook delivery can occasionally be delayed by a few seconds to a few minutes depending on network conditions. Wait a few minutes and then check the fee status again — it usually resolves on its own. If 24 hours have passed and the status has not updated, check whether the Stripe webhook endpoint is configured and active in your Stripe dashboard settings. Contact platform support if the webhook appears to be failing. As a workaround, the admin can record a manual offline payment adjustment to reflect the received amount while the webhook issue is investigated — this is reversible if the Stripe update eventually arrives.
Manual adjustment will not save
The reason field is required for every manual adjustment — the form cannot be submitted with an empty reason. Enter a descriptive reason before clicking Save. If the save button is still unresponsive, check that the amount field contains a valid number (no currency symbols or text characters) and that you have an active internet connection. The form submits to Firestore in real time and requires connectivity.
Parent cannot see their fee record in the dashboard
First, confirm the parent's account is linked to the team — their user record must have the team ID in their linked parent team IDs. Second, confirm the fee record has this parent's player listed as a recipient — open the fee in the admin panel and check the recipient list. Third, confirm the fee has not been canceled for this recipient (canceled fees do not appear as outstanding to parents, though they are still visible in the admin view). If all three checks pass and the parent still cannot see the fee, ask them to sign out and sign back in to refresh their session data.
Installment schedule is not showing in the parent's invoice view
Confirm that installment entries were added and saved on the fee record before the parent viewed it. Open the fee in the admin panel and verify that the installment section shows the expected entries with labels, amounts, and due dates. If the installment entries are present in the admin view but not visible to the parent, ask the parent to do a hard reload of their dashboard page. If entries are missing from the admin view, the installments were not saved — re-add them and save the fee record.
Fee shows Partial but parent insists they paid the full amount
First, verify the recorded payment entries against the fee total in the admin record. For manual/offline fees, confirm the amount received and recorded. For online Stripe fees, verify the Stripe session total from the parent's receipt against the fee total. If a discrepancy exists and the payment truly covered the full balance, the admin can record a manual adjustment for the remaining difference with a reason explaining the reconciliation.
Admin cannot find the fee management section
Fee management is accessed through the team admin panel — look for a Fees or Payments section in the team management navigation. If you do not see this option, confirm that you have admin access on the team (not just coach access). Ask the team owner to verify your access level in team settings. If you have admin access and the Fees section is still not visible, contact your platform administrator — the feature may need to be enabled for your organization.
Related Workflows
- Team Setup — configure team details and grant admin access before creating fees
- Manage Your Roster — ensure players and linked parents are on the roster before assigning them as fee recipients
- Registration — registration fees may flow into team fee records as part of the onboarding process