Skip to main content

Overview

Xenia gives you several ways to pull submission (checklist log) data out for reporting:
  • PDF reports — formatted inspection reports (single, merged, or one file per submission)
  • Excel exports — tabular submission data, generated asynchronously and delivered by notification
  • Spreadsheet link — a ready-to-download spreadsheet URL
  • Public PDF — a PDF for a submission whose public report is enabled
  • Submission records & counts — raw records and status counts for BI tools
All of these are reachable with a client key (x-client-key / x-client-secret). Base URL is https://api.xenia.team and every path starts with /api/v1. The workspace is derived from your key; where an unscoped /api/v1/ops/... path is shown, an equivalent /api/v1/ops/workspaces/{workspaceId}/... form also works.
Standard responses use the { data, meta } envelope. There is no status/statusCode/success field on those. The PDF endpoints are the exception — they respond with a raw { status, code, message, data } body and HTTP 202 while generation runs in the background. Long-running exports are generated out-of-band; the API returns immediately. Requests are bounded by an ALB timeout of roughly 60 seconds.

PDF Export

Generate a PDF for one or more submissions (checklist logs) of a template. Generation is asynchronous — the API accepts the request and the finished PDF is delivered by notification (a download:ready socket event / in-app notification). Endpoint: POST /api/v1/ops/checklists/{checklistId}/logs-pdf
Request Body: Response (HTTP 202):
If a single requested submission already has a rendered PDF, the API emits the ready event immediately and returns 202 with data.requestIds: []. If none of the submissions are accessible, it returns 400 with "You don't have permission to download PDF for this submission."

Excel Export

Kick off an Excel export of a template’s submissions. The report is generated in the background; the requester is notified when it’s ready (optionally emailed to recipientEmails). Endpoint: POST /api/v1/ops/checklists/{checklistId}/logs-excel
Request Body (all optional): Response:

Get a ready-to-download spreadsheet of submissions. This one is synchronous — it returns a download URL directly. Endpoint: POST /api/v1/ops/checklists/submissions-spreadsheet
Request Body: Response:

Public PDF

Generate a PDF for a submission whose public report has been enabled. This endpoint is public — it does not use client-key auth. Instead it requires an anonymousid request header, and the submission must have a public URL (public sharing turned on). Endpoint: POST /api/v1/ops/public/submissions/{submissionId}/pdf
Response (ready — HTTP 200):
Response (generating — HTTP 202):
Poll for completion with the matching status endpoint (same public auth):

Submission Records

Pull raw submission records for reporting/BI. Every field is optional; without a date filter it returns all matching submissions (up to a very large default limit — always paginate). Endpoint: POST /api/v1/ops/template-submissions
Request Body (all optional): Response:
meta.count is an object (a per-status breakdown), not a number. meta.totalCount is the total number of matching records — page against it using your offset/limit.

Submission Count by Status

Get submission counts grouped by status, with the same filters as submission records. Endpoint: POST /api/v1/ops/submissions-count-by-status
Request Body (all optional): checklists, fromDate, toDate, users, lastItemUpdatedBy, statuses, locations, searchText. Response:

Submission Attachments

List the photos/videos/files attached across submissions — handy for pulling captured media. Endpoint: POST /api/v1/ops/checklists/logs/attachments
Request Body (all optional): Response:
With groupBy: "location" the payload is { "data": { "locations": { "<locationId>": { "attachments": [...], "totalAttachments": 12, "page": 1, "totalPages": 1 } } }, "meta": {} }.

Common Workflow

Automate a daily report and follow up on results:

Best Practices

Always specify fromDate/toDate and an explicit limit. The submission-records default limit is very large; unbounded pulls risk hitting the ~60s timeout.
The PDF (202) and Excel endpoints return immediately and finish in the background. Wait for the delivery notification / email rather than expecting a file in the HTTP response.