Dataopi

Introduction

Self-hosted, API-first survey backend for internal teams. One superadmin, many project subaccounts, each with its own API keys.

Dataopi is a small internal, self-hosted platform for shipping satisfaction surveys. It is meant to be deployed once inside your organisation and consumed by other teams (marketing, success, ops…) through its API.

Mental model

  • A superadmin runs the deployment. There is no public signup — accounts are provisioned via a CLI script (or seed) directly against the database.
  • The superadmin uses the admin UI at /admin to create projects, which act as isolated subaccounts. Each project has its own surveys, response templates and API keys. A user only ever sees the projects they own.
  • Each project issues one or more API keys. Backends from other teams use those keys to script everything: create surveys, mint per-recipient links and pull responses. API keys are project-scoped — a key cannot reach into another project.
  • Recipients answer via tokenised one-link-per-person URLs at /r/{token}. Those links are public (no auth) but single-use.

What is in the box

  • Admin UI at /admin — login, project management, survey editor, template generation, API key issuance.
  • Public form at /r/{token} — rendered in the recipient's language (Spanish or English).
  • API with two auth modes:
    • cookie session (admin UI),
    • Authorization: Bearer <api-key> for server-to-server calls.
  • Five question types (text, boolean, select, number, scale) with conditional follow-ups and per-survey metadata schemas.
  • Single-use response templates: one URL per recipient, baked with arbitrary metadata, redeemable once and editable by the recipient.
  • This product documentation at /docs and an interactive OpenAPI / Swagger explorer at /api-docs.

Where to next

  • Getting started — deploy, create the superadmin, generate your first API key, fire your first request.
  • Concepts — projects, surveys, the question engine, response templates.
  • API reference — endpoints, auth, payload shapes.

On this page