Ulsav Docs

Export Your Data

Run a Report, export a CSV, schedule a recurring digest, or call the same endpoints from a session

Reports is the read-only surface for Organization data: a fixed catalogue of reports, each returning an entry table plus an aggregate summary. It never performs a write, so issuing a refund stays in its own operational screen.

  • Surface

    Reports

    Read-only; it never performs a write

  • Catalogue

    Fixed and versioned

    A report you may not read is absent, not empty

  • Gated by

    The Capability of its data

    No reports.* Capability exists

  • Export format

    CSV

    PDF is deferred, not half-built

  1. Open the catalogue

    The catalogue shows only what you may read, so a report gated by a Capability you lack is absent rather than empty.

    ReportWhat it containsNeeds
    OrdersConfirmed Orders, with revenue and feesorders.read
    AttendanceCheck-ins, with the attendance funnelcheckin_sessions.read
    TrafficPage views and traffic sourcesevents.read
    AttributionThe last-touch source of each confirmed Orderevents.read
    Activity logThe append-only record of organizer actionsaudit.read

    These five are the whole catalogue today. Reports named in older material — Registrations, Passes sold, Coupons, Refunds, Payouts, Settlements, Invoices, Ledger, Notifications, Tax — are not available as reports yet.

    No reports.* Capability exists: each report is gated by the Capability of its data, so granting a report is the same act as granting the underlying access.

    The catalogue ships in slices

    Orders, Attendance, Traffic, Attribution, and the Activity log are available today. The remaining keys above are specified and arrive with the Reports wave; none is partly implemented.

  2. Filter and scope it

    A report read takes an optional Event ID and an optional date window. Nothing else narrows it: there is no search parameter and no EventGroup or EventSeries scope.

    The catalogue screen has no filter controls yet. It lists the reports you can read and renders the selected one across the whole Organization, so narrowing a report means calling the API directly.

    A report also returns all of its rows in one response. There is no cursor, no page size, and no total to page through.

  3. Export a CSV

    Report cataloguePick a reportSummary and rows renderinlineExport CSVOne download, in the samerequest
    Diagram source
    flowchart TD
      C[Report catalogue] --> S[Pick a report]
      S --> I[Summary and rows render inline]
      I --> E[Export CSV]
      E --> D[One download, in the same request]

    Export is one request. The Export CSV button asks for the same report with format=csv and saves the file the server names, so there is no separate job to start, poll, or collect. The run endpoint records a run for history, but it returns the run rather than a file.

    A run records who requested it, its row count, its summary metrics, and when it finished. The scope and filter fields are stored empty today, so a run cannot yet be reproduced from its own record.

  4. Schedule delivery

    Scheduling lives under Reports → Scheduled Reports, and a ReportSchedule holds:

    • the report key, fixed at creation, and a name
    • a cadence: daily, weekly, or monthly
    • a delivery hour, chosen from a list labelled in UTC
    • a format, shown as CSV and not editable
    • recipients: Organization Members, plus optional external email addresses
    • an enabled flag, and the Member who created it

    Creating the schedule is the opt-in. The app writes a digest consent row for every Member recipient, and that row is what the sender checks at delivery time.

    Three properties of the current sender matter more than the form:

    • Members only. External addresses are accepted and stored, but delivery skips them.
    • A digest, not a file. The email summarises the report's metrics; the CSV is not attached and no link to a stored file is included.
    • One window. Every digest covers the last 30 days, whatever the cadence says.

    To change the report behind a schedule, delete it and create another. The key is read-only after creation.

  5. Understand the notification tier

    The specification defines three notification tiers. Only the transport ships today, so read this as the intended model rather than as behaviour you can rely on.

    TierClassWhat a recipient controls
    1Transactional — Order confirmations, refunds, payout and invoice noticesNothing; it cannot be disabled
    2Operational — a new Order, a payout failureNothing yet; the endpoints exist, there is no screen, and the sender does not consult them
    3Digests and marketing — a scheduled reportThe consent row written when the schedule is created

    Two practical consequences follow. A Tier 3 digest is decided by consent alone, so removing a Member from a schedule stops future sends. And tiers do not interact: a digest and a transactional message about the same subject are delivered independently.

    Settings → Notifications is not a preference editor. It is the delivery log: every attempted message, its channel, recipient, status, and attempt count, with a resend for Order confirmations and Pass links.

  6. Use the same endpoints from a session

    The report endpoints exist and return the same data the catalogue shows:

    GET /api/v1/organizations/{organization_id}/reports
    GET /api/v1/organizations/{organization_id}/reports/{report_key}?format=csv
    POST /api/v1/organizations/{organization_id}/reports/{report_key}/runs
    GET /api/v1/organizations/{organization_id}/report-runs/{run_id}
    GET /api/v1/organizations/{organization_id}/report-schedules

    All of them are session-only. API-key access is default-deny, and none of these operations declares an API-key Capability, so a key is refused: drive them from an authenticated browser session.

    Only the schedule list paginates, with the standard cursor envelope. The report reads return one response each, scoped to the Organization named in the path, and there is no cross-Organization read.

What is deliberately absent

A custom report builder, saved views, PDF, and non-CSV formats are deferred, not half-built. The catalogue is fixed so the API stays typed.

On this page