FlexiSurveyUser guide

Troubleshooting

Symptom-by-symptom answers to the issues users actually hit, from sign-in and building to field sync, exports, and the API.

For: All users, support staff, field coordinatorsPlan: All plans

This page collects the issues that actually reach support, organised by symptom. Each entry explains what the platform is doing and what to do about it. If your issue is not here, email support@flexisurvey.net with the survey name, the approximate time, and a screenshot of any error message; that combination usually lets us find the exact event in the logs.

Signing in and accounts

"Your session has expired" while you were working. Sessions are rotated for security and idle sessions eventually expire. Sign in again; nothing you submitted is lost. On the mobile apps this never touches offline data: the queue of unsynced interviews is preserved through any sign-out or expiry, and sync resumes after you re-authenticate.

An invitation link says it is invalid or expired. Invitations are single-use and time-limited. Ask your administrator to send a fresh invite; if the address was mistyped, the administrator should cancel the old invite and create a new one.

Two-factor codes stopped working after a phone change. Your administrator can reset two-factor enrolment from the user management screen, after which you can re-enrol on the new device.

Building surveys

"This question type needs at least one answer option." Choice questions (single choice, multiple choice, dropdown, ranking) need inline options, or a connected dataset as their option source. Add options, or switch the question to a dataset source.

"Answer options must have distinct values." Two options share the same stored value. Values (not labels) are what analytics and exports key on, so each must be unique within the question.

"A survey can hold at most 1,000 questions" or "at most 500 inline options." These are platform ceilings, described with the rest on the Technical Limits page. Split very large instruments; move very large choice lists into an external dataset.

Question editing is blocked on a live survey. Once a survey is active and has responses, structural changes (deleting questions, changing a question's type, tightening validation) are frozen because they would invalidate collected answers. Wording fixes, reordering, and adding questions stay allowed, and ship through the "publish revision" flow which records what changed and why. To restructure, pause the survey or duplicate it.

XLSForm import reports skipped or degraded rows. The import never drops anything silently: every row lands in one of three bands (imported, degraded, skipped) with a reason. Degraded rows imported with reduced behaviour (for example an expression the importer cannot translate); skipped rows name what blocked them. Fix the source sheet and re-import, or import as-is and rebuild the skipped pieces in the builder. XLSForm import works on draft surveys only.

A dataset cannot be deleted. A dataset referenced by a published survey returns a conflict on delete, deliberately: deleting it would strand the surveys that resolve options from it. Detach it from those surveys first (the dataset page lists exactly which surveys reference it).

Distributing

Recipients say they never received the survey email. Open the campaign's recipient list and check each recipient's delivery state, which is driven by real mailbox events: delivered, bounced, opened, clicked. A bounce means the address rejected the mail (fix the address); delivered-but-unopened usually means a spam folder. Ask recipients to allowlist your sending address.

The public survey link shows "not available". Public links only serve surveys in active status. Draft, paused, and closed surveys do not accept public responses.

Collecting in the field (mobile apps, beta)

A response shows a red "failed" chip in the Offline screen. The response exhausted its automatic retries (5 attempts with backoff), usually from prolonged connectivity loss or an expired session. It is still safely stored. Re-authenticate if prompted, then trigger a manual sync; failed rows are retried. Duplicates cannot result from retrying: every response carries an idempotency key the server recognises.

A storage warning banner appeared. Below 500 MB of free space the app warns; below 200 MB it blocks new photo and media capture (text answers continue) until space is freed. Nothing already captured is at risk.

"Offline storage is full" when saving an interview. A device holds up to 1,000 pending responses. Sync to drain the queue, then continue. Deployments expecting heavy volumes between connectivity windows should plan syncs accordingly; see the Offline Collection Reference.

An interview disappeared mid-entry. It almost certainly did not: partially completed interviews autosave as drafts on every answer. Reopen the survey and the draft restores where you left off, or check the Drafts section.

Analytics and exports

An export stopped at 10,000 responses. That is the per-export cap, and the export says so explicitly rather than silently truncating. For full extracts beyond the cap, use the API's incremental reads, which page through any volume (Developer Guide).

Numbers differ between a dashboard and an export. The usual cause is review states: quarantined and rejected responses are excluded from analytics automatically, and exports exclude them by default too, but an export taken with different options (or before a review action) can legitimately differ. Check the survey's review queue for recent quarantines or corrections.

A repeated question is missing from a chart. Questions inside repeat groups are excluded from single-response analytics views by design (one respondent contributes many values). Use the long-format export, where each repeat instance is its own row, for roster-level analysis.

API and webhooks

401 Unauthorized. The X-API-Key header is missing or the key was revoked. Keys are shown once at creation; if it is lost, mint a new one.

403 Forbidden. The key's role does not allow that operation, or the feature requires a higher plan. The error message names which.

429 Too Many Requests. You hit the key's hourly rate limit. Respect the rate-limit headers in the response and back off; an administrator can raise a specific key's limit.

Webhook signature verification keeps failing. The signature is computed over timestamp.rawBody, so any middleware that re-serialises the JSON body before your verification code runs will break it. Verify against the raw bytes, and check your clock: signatures outside the five-minute tolerance are rejected. Working verification samples in JavaScript and Python are in the Developer Guide.

Still stuck?

Email support@flexisurvey.net. Include your tenant name, the survey involved, what you expected, what happened instead, and the time it happened. Screenshots of exact error messages shorten every investigation.