JotForm Team Forms and Callbacks
Some regions collect extra team information — beyond what Lumieos itself asks for — through a JotForm form, separate per season. This page covers that team-information form and the callbacks it sends back. It is not about signing agreements with JotForm; for that, see Setting Up Agreement Integrations.
Prerequisite: You must have Manage Season (or partner administrator) permission to change these settings. See Permissions.
Overview
When a season’s JotForm Mode is set to Link or Frame, every team on that season sees a Complete Jotform button and a Pending Jotform action item until JotForm notifies Lumieos that the team has submitted. That notification is the “callback” this page is about — a webhook JotForm posts to Lumieos every time someone submits the form.
Admin URL:
Where the webhook URL lives
Each program and season has its own JotForm webhook URL — a season’s callback endpoint only ever looks up teams within that season, so pointing two seasons’ forms at the same URL would mean team numbers from one program silently checked against the other.
Open Region Management → Configuration → Season → Season Settings, pick the season, and expand JotForm Integration. Once JotForm Mode is anything other than Disabled, a read-only Webhook URL field appears, with a status chip beside it reading Secured or Not secured (see Securing the webhook below) — copy the URL into JotForm’s webhook settings for that season’s form. It’s generated from your own partner domain, so it reads something like:
https://<your partner domain>/api/webhook/jotform/team/<season-id>/Next to it, Webhook Lookup Key names the JotForm question that holds the team’s number (JotForm question names look like q5_teamNumber). Rather than typing it from memory, submit a test entry on the form, then open it in the Recent JotForm Callbacks panel below and click Use as lookup key next to the parsed answer that holds the team’s number — see Reading a callback’s outcome for what the panel shows.
Securing the webhook
Each season’s JotForm webhook URL can carry a per-season secret, so the URL is only good if you’ve deliberately shared it — copying it into the wrong place, or someone finding it later, doesn’t give them a way to feed fake submissions into that season.
The status chip beside the Webhook URL field on Season Settings shows whether a season has this turned on: Secured or Not secured. To turn it on, click Secure this webhook. Lumieos generates the secret and the Webhook URL field updates immediately — the previous URL stops working the moment you do this, so copy the new one and paste it into JotForm’s webhook settings for that season’s form (Settings → Integrations → Webhooks) right away, or submissions will bounce until you do.
Rotate secret does the same thing again later: a fresh secret, a new URL, and the old one retired immediately. Use it whenever you want to replace a URL that may have been shared more widely than intended.
Until you secure a season, its original URL keeps working, so nothing breaks for forms that are already set up — but secure every season you use, since an unsecured URL isn’t protected against forged submissions.
Only region administrators can secure or rotate a season’s webhook. Once a season is secured, other staff with access to Season Settings see the chip but no longer see the full Webhook URL.
Note: When one JotForm feeds several programs (see Sharing one JotForm across programs below), each program/season has its own webhook URL and its own secret. Securing one program’s URL doesn’t secure the others — paste each program’s secured URL into that program’s copy of the form’s webhook settings separately.
Reading a callback’s outcome
Every time JotForm posts to a season’s webhook, Lumieos records what it did with the submission. The Recent JotForm Callbacks panel on Season Settings shows the last ten for the season you’re looking at; the JotForm Callbacks page shows every callback across every season. Each row carries an outcome:
| Outcome | Meaning | What to do |
|---|---|---|
| Team matched | The submission’s team-number answer matched a team in this program’s season. The team’s Jotform requirement is now complete. | Nothing — this is the normal case. |
| No team matched | The number submitted isn’t a team in this program’s season. | Check for a typo, or confirm the team exists in Lumieos yet — a coach can submit before their team record is created. |
| Handled by another program | The number belongs to a team in a sibling program’s season. Expected when one JotForm is shared across programs — see below. | Nothing to fix on this season; the row (and the detail view) names the program and season the number actually belongs to. |
| Different program | This season expects a specific answer to a program question (see Sharing one JotForm across programs below), and the submission answered something else. | Confirm the season’s Expected Program Answer matches the form’s actual answer text, or that the submitter picked the right program on the form. |
| Not a valid team number | The value submitted isn’t a plausible team number — for example, a phone number typed into the team-number field. | Check the field mapping is pointed at the right JotForm question, and that the form’s instructions are clear about what goes in that field. |
| Field missing, Composite value, Could not decode, or Season not active | Lower-level problems: the configured lookup field wasn’t present in the submission, the field held a multi-part answer (like a Full Name widget) that can never be a team number, JotForm’s payload couldn’t be parsed, or the season isn’t currently active. | Open the callback’s raw payload to see what JotForm actually sent, and adjust the Webhook Lookup Key or season configuration accordingly. |
Note: An unmatched or otherwise unresolved callback still returns success to JotForm, so it won’t retry indefinitely. It’s recorded here so an admin can investigate at their own pace.
Sharing one JotForm across programs
Some regions run one JotForm form for every program (FLL, FTC, etc.) rather than a separate form per program. Because team numbers are only unique within a program, the same number can belong to a different team in each program’s season — without extra configuration, a submission meant for one program’s team could match a same-numbered team in another program’s season.
To guard against that, a season can name:
- Program Field — the JotForm question that records which program the submitter is answering for.
- Expected Program Answer — the answer this season expects in that field. A submission answering anything else is left alone (recorded as Different program) instead of being matched against a team here. Comparison ignores case and spacing.
Both are optional and blank by default, which leaves the original behavior unchanged (no program check).
To set them up:
- Submit a test entry on the shared JotForm.
- On Season Settings, open the new entry in Recent JotForm Callbacks and find the parsed answer that names the program.
- Click Use as program field on that row.
- Fill in Expected Program Answer with the exact text this season’s version of the question should contain, then save.
- Repeat for each season/program the form is shared with, using the answer text specific to that program.
The JotForm Callbacks page
Because a shared JotForm posts to whichever single season’s URL it was given, a submission meant for a different program or season still lands there rather than where it was aimed — which is exactly the case the per-season viewer on Season Settings can’t show you. Configuration → Season → JotForm Callbacks is the region-wide view: every callback this partner has received, across every program and season (including archived ones), newest first.
Admin URL:
You can reach it two ways: directly from the Configuration menu, or via the View all callbacks link on a season’s Recent JotForm Callbacks panel — which opens the log pre-filtered to that season.
Filters
- Program (only shown when your partner runs more than one)
- Season — includes archived seasons, since a callback aimed at a finished season still needs to say which one
- Outcome — any of the outcomes listed above, or the broader buckets Matched a team, Did not match, and Not recorded
- Team #
- Received from / Received to — a date range; “to” includes the entire day selected
Detail view
Click the eye icon on any row to open that callback in full: the parsed form answers (field key, question label, and value), which team it matched (if any, linked directly to that team on the Teams page), and the raw payload JotForm sent.
Note: The submitted answers are a coach’s own information — name, email, phone — so viewing a callback’s payload requires the same personal-information prerequisites as other admin views that show PII. The listing itself (outcome, program, season, team number) isn’t gated, but a value that isn’t provably a team number is hidden from an account that hasn’t completed those prerequisites. See Permissions for what’s required.