Outgoing Reports

Outgoing reports deliver aggregated data to your URL on a schedule. They use the same signed delivery infrastructure as outgoing webhooks — HMAC-SHA256 signature, Timestamp header, authentication, retries, and delivery logs.

Reports are configured in the Open API → Outgoing Reports tab. Each report has a type and a schedule.

Report types

TypeDescription
todo_list_statsAggregated todo-list completion statistics for the past day or week, broken down by department and todo template.

Schedules

ScheduleDelivery
dailyEvery day at 06:00 Danish time (CET in winter, CEST in summer).
weeklyEvery Monday at 06:00 Danish time (CET in winter, CEST in summer).

Both schedules send the same report, with the event name monotree.todoliststats.daily. A daily report covers the day before it is sent. A weekly report covers the seven days before it is sent, Monday to Sunday.

Payload

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "event": "monotree.todoliststats.daily",
  "version": "v1",
  "customer": "acme",
  "timestamp": 1774414800,
  "payload": {
    "data": {
      "total_lists": 42,
      "total_tasks": 150,
      "completed_tasks": 95,
      "departments": [
        {
          "id": 1,
          "name": "Kitchen",
          "list_count": 5,
          "total_tasks": 45,
          "completed_tasks": 32,
          "completion_percentage": 71.11,
          "todo_list_templates": {
            "data": [
              {
                "id": 1,
                "title": "Morning Checklist",
                "list_count": 2,
                "task_count": 15,
                "completed_count": 10,
                "task_templates_count": 3,
                "completion_percentage": 66.67,
                "meta": { "data": { "type": "TodoListTemplate", "base_locale": "en" } },
                "todo_task_templates": {
                  "data": [
                    {
                      "id": 101,
                      "title": "Check cooler temperatures",
                      "body": "Note the temperature of each cooler.",
                      "task_count": 5,
                      "completed_count": 3,
                      "completion_percentage": 60,
                      "meta": { "data": { "type": "TodoTaskTemplate" } },
                      "tasks": {
                        "data": [
                          {
                            "id": 1001,
                            "due_at": "2026-03-24",
                            "checked_at": "2026-03-24T07:30:00.000000Z",
                            "user_id": 88,
                            "todo_list_id": 512,
                            "todo_task_template_id": 101,
                            "comments_count": 0,
                            "user": {
                              "data": {
                                "id": 88,
                                "type": "default",
                                "first_name": "Jane",
                                "last_name": "Doe",
                                "full_name": "Jane Doe",
                                "email": "jane@example.com",
                                "avatar_url": "https://images.monotree.com/avatars/jane-doe.jpg",
                                "deleted_at": null,
                                "is_away": false,
                                "meta": { "data": { "type": "User" } }
                              }
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

The counts cover the lists that were due in the report's period, in Danish time: yesterday for a daily report, the past seven days for a weekly one.

FieldDescription
total_lists, total_tasks, completed_tasksTotals across all departments.
departments[]One row per department: id, name, list_count, total_tasks, completed_tasks, completion_percentage, and its list templates under todo_list_templates.data.
todo_list_templates.data[]A todo list template: id, title, list_count, task_count, completed_count, task_templates_count, completion_percentage, meta (its type and base_locale), and its task templates under todo_task_templates.data.
todo_task_templates.data[]A task template: id, title, body, task_count, completed_count, completion_percentage, meta (only its type), and the tasks made from it under tasks.data.
tasks.data[]One instance of the task on a list due in the period: id, due_at, checked_at, user_id, todo_list_id, todo_task_template_id, comments_count. due_at is a date (YYYY-MM-DD). checked_at is in UTC with microseconds (2026-03-24T07:30:00.000000Z). user is the person who ticked it, in the older format where it is wrapped in { "data": ... } with a meta object, like the user in the form response alarm payload. On a task nobody ticked, checked_at and user_id are null and user is { "data": [] }.

Authentication and signature

Reports support the same authentication options as outgoing webhooks (Bearer token, Basic Auth, API Key header, custom headers). Signature verification works identically — see the Outgoing Webhooks page.