Overview
Xenia provides multiple export options for submission data:
- PDF Reports: Formatted inspection reports with scores, photos, and signatures
- Excel Exports: Tabular data for analysis and reporting
- Flagged Items Report: Focus on non-compliant items
- Public Report Links: Shareable report URLs
PDF Export
Generate a PDF report for one or more submissions.
Export Single Submission
curl -X POST "https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/checklists/{checklistId}/logs-pdf" \
-H "x-client-key: YOUR_CLIENT_KEY" \
-H "x-client-secret: YOUR_CLIENT_SECRET" \
-H "workspace-id: {workspaceId}" \
-H "Content-Type: application/json" \
-d '{
"logIds": ["submission-uuid"],
"includePhotos": true,
"includeSignatures": true,
"includeNotes": true,
"includeScore": true
}'
Request Body:
| Field | Type | Required | Description |
|---|
logIds | string[] | Yes | Submission IDs to export |
includePhotos | boolean | No | Include attached photos (default: true) |
includeSignatures | boolean | No | Include signature captures (default: true) |
includeNotes | boolean | No | Include item notes (default: true) |
includeScore | boolean | No | Include scoring summary (default: true) |
merged | boolean | No | Merge multiple submissions into one PDF |
Response (Async):
{
"status": "success",
"code": 200,
"data": {
"jobId": "export-job-uuid",
"status": "processing",
"message": "PDF generation started. You will receive an email when ready."
}
}
PDF generation is asynchronous for large submissions. The generated PDF is emailed to the requesting user.
Export Multiple Submissions (Merged)
Combine multiple submissions into a single PDF document.
curl -X POST "https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/checklists/{checklistId}/logs-pdf" \
-H "x-client-key: YOUR_CLIENT_KEY" \
-H "x-client-secret: YOUR_CLIENT_SECRET" \
-H "workspace-id: {workspaceId}" \
-H "Content-Type: application/json" \
-d '{
"logIds": ["submission-uuid-1", "submission-uuid-2", "submission-uuid-3"],
"merged": true,
"includePhotos": false
}'
Excel Export
Export submission data to Excel format for analysis.
Export Submissions to Excel
curl -X POST "https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/checklists/{checklistId}/logs-excel" \
-H "x-client-key: YOUR_CLIENT_KEY" \
-H "x-client-secret: YOUR_CLIENT_SECRET" \
-H "workspace-id: {workspaceId}" \
-H "Content-Type: application/json" \
-d '{
"dateFrom": "2024-12-01",
"dateTo": "2024-12-31",
"locationIds": ["location-uuid-1", "location-uuid-2"],
"status": "submitted"
}'
Request Body:
| Field | Type | Description |
|---|
dateFrom | string | Start date filter (YYYY-MM-DD) |
dateTo | string | End date filter (YYYY-MM-DD) |
locationIds | string[] | Filter by locations |
status | string | Filter by status |
logIds | string[] | Specific submission IDs |
Response (Async):
{
"status": "success",
"code": 200,
"data": {
"jobId": "export-job-uuid",
"status": "processing",
"message": "Excel export started. You will receive an email when ready."
}
}
The Excel export contains:
| Column | Description |
|---|
| Submission ID | Unique identifier |
| Template Name | Source template |
| Location | Location name |
| Submitter | User who submitted |
| Date | Submission date |
| Score | Overall score (if enabled) |
| Status | Submission status |
| [Question 1] | Answer to first question |
| [Question 2] | Answer to second question |
| … | Additional question columns |
Spreadsheet Data (JSON)
Get submission data in a tabular format suitable for custom reporting.
curl -X POST "https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/checklists/submissions-spreadsheet" \
-H "x-client-key: YOUR_CLIENT_KEY" \
-H "x-client-secret: YOUR_CLIENT_SECRET" \
-H "workspace-id: {workspaceId}" \
-H "Content-Type: application/json" \
-d '{
"checklistId": "template-uuid",
"dateFrom": "2024-12-01",
"dateTo": "2024-12-31",
"columns": ["submissionId", "location", "date", "score", "status"]
}'
Response:
{
"status": "success",
"code": 200,
"data": {
"headers": ["Submission ID", "Location", "Date", "Score", "Status"],
"rows": [
["sub-001", "Building A", "2024-12-15", 95, "submitted"],
["sub-002", "Building B", "2024-12-16", 88, "submitted"],
["sub-003", "Building A", "2024-12-17", 72, "pending_approval"]
],
"totalRows": 3
}
}
Flagged Items Report
Get a report of all flagged (non-compliant) items across submissions.
curl -X POST "https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/submissions/flagged-items" \
-H "x-client-key: YOUR_CLIENT_KEY" \
-H "x-client-secret: YOUR_CLIENT_SECRET" \
-H "workspace-id: {workspaceId}" \
-H "Content-Type: application/json" \
-d '{
"checklistId": "template-uuid",
"dateFrom": "2024-12-01",
"dateTo": "2024-12-31",
"locationIds": ["location-uuid"]
}'
Response:
{
"status": "success",
"code": 200,
"data": [
{
"submissionId": "sub-uuid-1",
"submissionDate": "2024-12-15T10:30:00Z",
"location": {
"id": "location-uuid",
"name": "Building A"
},
"submitter": {
"id": "user-uuid",
"fullName": "John Smith"
},
"flaggedItem": {
"id": "item-uuid",
"title": "Fire extinguisher inspection tag current?",
"sectionTitle": "Fire Safety",
"answer": "no",
"flagNote": "Tag expired 2 months ago",
"attachments": ["https://storage.example.com/expired-tag.jpg"]
}
},
{
"submissionId": "sub-uuid-2",
"submissionDate": "2024-12-16T14:00:00Z",
"location": {
"id": "location-uuid",
"name": "Building A"
},
"submitter": {
"id": "user-uuid-2",
"fullName": "Jane Doe"
},
"flaggedItem": {
"id": "item-uuid-2",
"title": "Emergency exit clear?",
"sectionTitle": "Fire Safety",
"answer": "no",
"flagNote": "Boxes blocking exit",
"attachments": []
}
}
]
}
Use the flagged items report to create corrective action tasks. Loop through flagged items and create tasks for each issue.
Public Report Links
Toggle Public Report Access
Enable or disable public sharing for a submission report.
curl -X GET "https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/logs/{logId}/toggle-public-report" \
-H "x-client-key: YOUR_CLIENT_KEY" \
-H "x-client-secret: YOUR_CLIENT_SECRET" \
-H "workspace-id: {workspaceId}"
Response:
{
"status": "success",
"code": 200,
"data": {
"isPublic": true,
"publicUrl": "https://reports.xenia.team/public/abc123xyz",
"expiresAt": null
}
}
Generate Public PDF
Generate a PDF for a public report link.
curl -X POST "https://api.xenia.team/api/v1/ops/public/submissions/{submissionId}/pdf" \
-H "Content-Type: application/json" \
-d '{
"accessToken": "public-access-token"
}'
Response:
{
"status": "success",
"code": 200,
"data": {
"status": "processing",
"pollUrl": "/api/v1/ops/public/submissions/{submissionId}/pdf-status"
}
}
Check PDF Generation Status
curl -X GET "https://api.xenia.team/api/v1/ops/public/submissions/{submissionId}/pdf-status?accessToken=public-access-token"
Response (Processing):
{
"status": "success",
"code": 200,
"data": {
"status": "processing",
"progress": 60
}
}
Response (Complete):
{
"status": "success",
"code": 200,
"data": {
"status": "complete",
"downloadUrl": "https://storage.example.com/reports/submission-report.pdf"
}
}
Submission Statistics
Count by Status
Get submission counts grouped by status.
curl -X POST "https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/submissions-count-by-status" \
-H "x-client-key: YOUR_CLIENT_KEY" \
-H "x-client-secret: YOUR_CLIENT_SECRET" \
-H "workspace-id: {workspaceId}" \
-H "Content-Type: application/json" \
-d '{
"checklistId": "template-uuid",
"dateFrom": "2024-12-01",
"dateTo": "2024-12-31"
}'
Response:
{
"status": "success",
"code": 200,
"data": {
"draft": 5,
"submitted": 120,
"pending_approval": 15,
"approved": 100,
"rejected": 10,
"total": 250
}
}
Template Submission Summary
Get submission summary across multiple templates.
curl -X POST "https://api.xenia.team/api/v1/ops/workspaces/{workspaceId}/template-submissions" \
-H "x-client-key: YOUR_CLIENT_KEY" \
-H "x-client-secret: YOUR_CLIENT_SECRET" \
-H "workspace-id: {workspaceId}" \
-H "Content-Type: application/json" \
-d '{
"dateFrom": "2024-12-01",
"dateTo": "2024-12-31"
}'
Response:
{
"status": "success",
"code": 200,
"data": [
{
"checklistId": "template-uuid-1",
"checklistName": "Daily Safety Inspection",
"submissionCount": 150,
"averageScore": 91.5,
"passRate": 95.3
},
{
"checklistId": "template-uuid-2",
"checklistName": "Weekly Equipment Check",
"submissionCount": 24,
"averageScore": 88.2,
"passRate": 91.7
}
]
}
Common Workflows
Automated Daily Report
Generate daily reports for management review:
#!/bin/bash
# Daily report generation script
WORKSPACE_ID="your-workspace-uuid"
CHECKLIST_ID="daily-safety-template-uuid"
TODAY=$(date +%Y-%m-%d)
# Export yesterday's submissions to Excel
curl -X POST ".../checklists/${CHECKLIST_ID}/logs-excel" \
-d "{
\"dateFrom\": \"${TODAY}\",
\"dateTo\": \"${TODAY}\",
\"status\": \"submitted\"
}"
# Get flagged items for follow-up
FLAGGED=$(curl -X POST ".../submissions/flagged-items" \
-d "{
\"checklistId\": \"${CHECKLIST_ID}\",
\"dateFrom\": \"${TODAY}\",
\"dateTo\": \"${TODAY}\"
}")
# Process flagged items (create tasks, send alerts, etc.)
echo "${FLAGGED}" | jq '.data[] | .flaggedItem.title'
BI Integration
Extract submission data for business intelligence platforms:
# Get submission data in tabular format
curl -X POST ".../checklists/submissions-spreadsheet" \
-d '{
"checklistId": "template-uuid",
"dateFrom": "2024-01-01",
"dateTo": "2024-12-31",
"columns": [
"submissionId",
"location",
"date",
"score",
"status",
"submitterName"
]
}' | jq '.data.rows' > submissions_2024.json
# Import into data warehouse
# bq load --source_format=NEWLINE_DELIMITED_JSON dataset.submissions submissions_2024.json
Compliance Report Generation
Best Practices
Schedule exports during off-peak hours
Large Excel exports can be resource-intensive. Schedule automated exports during off-peak hours to minimize impact.
Use date filters to limit data volume
Always specify date ranges when exporting. This improves performance and keeps file sizes manageable.
Leverage flagged items for action tracking
Regularly export flagged items and create corrective action tasks. This closes the loop on identified issues.
Share public links sparingly
Public report links bypass authentication. Use them only when necessary and consider adding expiration dates.
Maintain a regular archive of exports for compliance and audit purposes. Don’t rely solely on real-time API access.