> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xenia.team/llms.txt
> Use this file to discover all available pages before exploring further.

# Submission Exports

> Export submission data to PDF, Excel, and other formats

## 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

<CodeGroup>
  ```bash cURL theme={null}
  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
    }'
  ```
</CodeGroup>

**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):**

```json theme={null}
{
  "status": "success",
  "code": 200,
  "data": {
    "jobId": "export-job-uuid",
    "status": "processing",
    "message": "PDF generation started. You will receive an email when ready."
  }
}
```

<Note>
  PDF generation is asynchronous for large submissions. The generated PDF is emailed to the requesting user.
</Note>

### Export Multiple Submissions (Merged)

Combine multiple submissions into a single PDF document.

<CodeGroup>
  ```bash cURL theme={null}
  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
    }'
  ```
</CodeGroup>

***

## Excel Export

Export submission data to Excel format for analysis.

### Export Submissions to Excel

<CodeGroup>
  ```bash cURL theme={null}
  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"
    }'
  ```
</CodeGroup>

**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):**

```json theme={null}
{
  "status": "success",
  "code": 200,
  "data": {
    "jobId": "export-job-uuid",
    "status": "processing",
    "message": "Excel export started. You will receive an email when ready."
  }
}
```

### Excel Output Format

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.

<CodeGroup>
  ```bash cURL theme={null}
  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"]
    }'
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "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.

<CodeGroup>
  ```bash cURL theme={null}
  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"]
    }'
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "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": []
      }
    }
  ]
}
```

<Tip>
  Use the flagged items report to create corrective action tasks. Loop through flagged items and create tasks for each issue.
</Tip>

***

## Public Report Links

### Toggle Public Report Access

Enable or disable public sharing for a submission report.

<CodeGroup>
  ```bash cURL theme={null}
  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}"
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "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.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.xenia.team/api/v1/ops/public/submissions/{submissionId}/pdf" \
    -H "Content-Type: application/json" \
    -d '{
      "accessToken": "public-access-token"
    }'
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "status": "success",
  "code": 200,
  "data": {
    "status": "processing",
    "pollUrl": "/api/v1/ops/public/submissions/{submissionId}/pdf-status"
  }
}
```

### Check PDF Generation Status

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://api.xenia.team/api/v1/ops/public/submissions/{submissionId}/pdf-status?accessToken=public-access-token"
  ```
</CodeGroup>

**Response (Processing):**

```json theme={null}
{
  "status": "success",
  "code": 200,
  "data": {
    "status": "processing",
    "progress": 60
  }
}
```

**Response (Complete):**

```json theme={null}
{
  "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.

<CodeGroup>
  ```bash cURL theme={null}
  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"
    }'
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "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.

<CodeGroup>
  ```bash cURL theme={null}
  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"
    }'
  ```
</CodeGroup>

**Response:**

```json theme={null}
{
  "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:

```bash theme={null}
#!/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:

```bash theme={null}
# 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

```mermaid theme={null}
sequenceDiagram
    participant Client as Your System
    participant API as Xenia API
    participant Email as Email Service

    Client->>API: 1. POST /submissions/flagged-items
    Note right of Client: Get non-compliant items
    API-->>Client: Flagged items list

    Client->>API: 2. POST /checklists/{id}/logs-pdf
    Note right of Client: Generate PDF report
    API-->>Client: Job ID (async)

    API->>Email: 3. PDF ready notification
    Email-->>Client: Download link

    Client->>Client: 4. Distribute report
```

***

## Best Practices

<AccordionGroup>
  <Accordion title="Schedule exports during off-peak hours">
    Large Excel exports can be resource-intensive. Schedule automated exports during off-peak hours to minimize impact.
  </Accordion>

  <Accordion title="Use date filters to limit data volume">
    Always specify date ranges when exporting. This improves performance and keeps file sizes manageable.
  </Accordion>

  <Accordion title="Leverage flagged items for action tracking">
    Regularly export flagged items and create corrective action tasks. This closes the loop on identified issues.
  </Accordion>

  <Accordion title="Share public links sparingly">
    Public report links bypass authentication. Use them only when necessary and consider adding expiration dates.
  </Accordion>

  <Accordion title="Archive old exports">
    Maintain a regular archive of exports for compliance and audit purposes. Don't rely solely on real-time API access.
  </Accordion>
</AccordionGroup>

***

## Related Guides

* [Template Management](/guides/workflows/template-management) - Create and configure templates
* [Submission Workflow](/guides/workflows/submission-workflow) - Complete inspections
* [Submission Approvals](/guides/workflows/submission-approvals) - Configure approval workflows
