Part3 Developers

Organization analytics

GET /organization/{orgId}/stats/analytics

Run analytics stats for an organization

GET
/organization/{orgId}/stats/analytics
AuthorizationBearer <token>

In: header

Path Parameters

orgId*string

Organization ID.

Query Parameters

include?string

Comma-separated stat types to compute. Order does not matter. Shared stats: overdueByAssignee, avgReviewTime, documentVolume, topContributors, assignedDocuments, delaysByConsultantType, reviewTimeByConsultant, changeOrderSummary, documentTrend, overdueTrend, stepResponseTime. Org-only: activityByProject.

from?string

ISO-8601 date or date-time. Lower bound for the stat (which timestamp is bounded depends on the stat — documents.createdAt, documents.dueDate, documentSections.reviewedAt, etc.).

to?string

ISO-8601 date or date-time. Upper bound, same column as from.

projects?string

Comma-separated project UIDs to restrict the stat to. For web-app users this list is intersected with the projects they have access to — passing a project they cannot see filters it out silently.

documentType?string

Comma-separated document types from the document_type_code enum (matches documents.type exactly): Bulletin, CA, CD, Certificate, CO, minute, PC, Quote, report, RFI, SI, Submittal. Case-sensitive.

documentStatus?string

Comma-separated document_status values (draft, issued, submitted, with-consultants, closed, accepted, approved, returned, etc.).

userId?string

Filter to one user (Part3 user UID). Currently used by assignedDocuments. For web-app users on assignedDocuments, this is force-overridden to their own UID server-side.

granularity?string

When set, stats that support bucketing (most of them — see the description for the per-stat support matrix) include a buckets array of {date, count} alongside the aggregate.

Value in"daily" | "weekly" | "monthly"
periods?string

Number of buckets when granularity is set. Defaults: 7 (daily), 4 (weekly), 12 (monthly). Pass as a string — query-string-encoded integer.

Response Body

application/json

application/json

application/json

curl -X GET "https://api.part3.io/v1/organization/org_8a1b2c3d4e/stats/analytics"
{
  "overdueByAssignee": {
    "all": [
      {
        "userId": "user_99a8b7c6d5",
        "name": "Anika Patel",
        "email": "anika@example.com",
        "overdueCount": 7
      },
      {
        "userId": "user_3b2a1c9d8e",
        "name": "Marcus Chen",
        "email": "marcus@example.com",
        "overdueCount": 4
      }
    ],
    "byType": {
      "RFI": [
        {
          "userId": "user_99a8b7c6d5",
          "name": "Anika Patel",
          "email": "anika@example.com",
          "overdueCount": 5
        }
      ],
      "Submittal": [
        {
          "userId": "user_99a8b7c6d5",
          "name": "Anika Patel",
          "email": "anika@example.com",
          "overdueCount": 2
        },
        {
          "userId": "user_3b2a1c9d8e",
          "name": "Marcus Chen",
          "email": "marcus@example.com",
          "overdueCount": 4
        }
      ]
    }
  },
  "documentVolume": {
    "all": [
      {
        "userId": "user_99a8b7c6d5",
        "name": "Anika Patel",
        "email": "anika@example.com",
        "documentCount": 28
      }
    ],
    "byType": {
      "RFI": [
        {
          "userId": "user_99a8b7c6d5",
          "name": "Anika Patel",
          "email": "anika@example.com",
          "documentCount": 12
        }
      ],
      "Submittal": [
        {
          "userId": "user_99a8b7c6d5",
          "name": "Anika Patel",
          "email": "anika@example.com",
          "documentCount": 16
        }
      ]
    }
  },
  "documentTrend": {
    "buckets": [
      {
        "date": "2026-04-06",
        "count": 11
      },
      {
        "date": "2026-04-13",
        "count": 14
      },
      {
        "date": "2026-04-20",
        "count": 9
      },
      {
        "date": "2026-04-27",
        "count": 17
      }
    ],
    "granularity": "weekly"
  }
}
{
  "error": "Insufficient permissions"
}
{
  "error": "Insufficient permissions"
}