Skip to main content
GET
/
api
/
v1
/
analytics
/
summary
Analytics Summary
curl --request GET \
  --url https://api.example.com/api/v1/analytics/summary
{
  "total_reviews": 123,
  "success_rate": 123,
  "avg_processing_seconds": 123,
  "connected_repos": 123,
  "reviews_today": 123,
  "reviews_this_week": 123,
  "avg_merge_hours": 123,
  "avg_pr_size": 123,
  "last_week_activity": [
    {}
  ],
  "last_week_activity[].pr_number": 123,
  "last_week_activity[].title": "<string>",
  "last_week_activity[].author": "<string>",
  "last_week_activity[].repo_name": "<string>",
  "last_week_activity[].state": "<string>",
  "last_week_activity[].additions": 123,
  "last_week_activity[].deletions": 123,
  "last_week_activity[].changed_files": 123
}

Overview

Retrieve comprehensive analytics including total reviews, success rates, processing times, and repository metrics. Data is deduplicated by unique PR to provide accurate insights.

Authentication

Requires a valid JWT token in the Authorization header:
Authorization: Bearer YOUR_JWT_TOKEN

Response

total_reviews
integer
Total number of unique PRs reviewed (deduplicated by repo + PR number)
success_rate
float
Percentage of reviews that completed successfully (0-100)
avg_processing_seconds
float
Average time in seconds to complete a review
connected_repos
integer
Number of active repositories connected to your account
reviews_today
integer
Number of PRs reviewed today
reviews_this_week
integer
Number of PRs reviewed in the last 7 days
avg_merge_hours
float
Average time in hours from PR creation to merge (null if no merged PRs)
avg_pr_size
integer
Average PR size in lines changed (additions + deletions)
last_week_activity
array
Array of PRs reviewed in the last 7 days
last_week_activity[].pr_number
integer
Pull request number
last_week_activity[].title
string
PR title
last_week_activity[].author
string
GitHub username of the author
last_week_activity[].repo_name
string
Repository full name (owner/repo)
last_week_activity[].state
string
Current PR state: open, merged, or closed
last_week_activity[].additions
integer
Lines added in the PR
last_week_activity[].deletions
integer
Lines deleted in the PR
last_week_activity[].changed_files
integer
Number of files modified in the PR

Example Request

curl -X GET "https://api.nectr.ai/api/v1/analytics/summary" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Example Response

{
  "total_reviews": 127,
  "success_rate": 94.5,
  "avg_processing_seconds": 45.3,
  "connected_repos": 5,
  "reviews_today": 8,
  "reviews_this_week": 23,
  "avg_merge_hours": 18.7,
  "avg_pr_size": 342,
  "last_week_activity": [
    {
      "pr_number": 42,
      "title": "Add user authentication endpoints",
      "author": "johndoe",
      "repo_name": "acme/api-server",
      "state": "open",
      "additions": 245,
      "deletions": 18,
      "changed_files": 8
    },
    {
      "pr_number": 41,
      "title": "Fix database connection pooling",
      "author": "janedoe",
      "repo_name": "acme/api-server",
      "state": "merged",
      "additions": 87,
      "deletions": 43,
      "changed_files": 3
    }
  ]
}

Metrics Explanation

Success Rate

Calculated as:
success_rate = (completed_reviews / total_reviews) * 100
Where:
  • completed_reviews: Reviews with status = “completed”
  • total_reviews: Total unique PRs (deduplicated by repo + PR number)

Average Processing Time

Average duration from started_at to completed_at for all completed workflow runs. Excludes outliers (>5 minutes) to prevent skewing from stuck processes.

Average Merge Hours

Calculated only for merged PRs with valid timestamps. Excludes outliers (>30 days) to prevent skewing from stale PRs. Returns null if no merged PRs exist.

PR Size

Sum of additions and deletions for each PR:
pr_size = additions + deletions

Use Cases

Dashboard Overview

summary = get_analytics_summary()

print(f"📊 Analytics Dashboard")
print(f"Total Reviews: {summary['total_reviews']}")
print(f"Success Rate: {summary['success_rate']}%")
print(f"Avg Processing: {summary['avg_processing_seconds']}s")
print(f"Connected Repos: {summary['connected_repos']}")
print(f"")
print(f"📈 Recent Activity")
print(f"Today: {summary['reviews_today']} reviews")
print(f"This Week: {summary['reviews_this_week']} reviews")
print(f"")
print(f"⏱️ PR Metrics")
print(f"Avg Merge Time: {summary['avg_merge_hours']:.1f} hours")
print(f"Avg PR Size: {summary['avg_pr_size']} lines")

Monitor Team Velocity

summary = get_analytics_summary()

if summary['avg_merge_hours']:
    if summary['avg_merge_hours'] < 24:
        print("✅ Excellent merge velocity! PRs are being merged quickly.")
    elif summary['avg_merge_hours'] < 72:
        print("⚠️ Moderate merge velocity. Consider reviewing PRs faster.")
    else:
        print("❌ Slow merge velocity. PRs are taking too long to merge.")

Activity Tracking

summary = get_analytics_summary()

print("Recent PR Activity:")
for pr in summary['last_week_activity']:
    status_emoji = {'open': '🔵', 'merged': '✅', 'closed': '❌'}[pr['state']]
    print(f"{status_emoji} #{pr['pr_number']}: {pr['title']}")
    print(f"   Author: {pr['author']} | Changes: +{pr['additions']} -{pr['deletions']}")

Build docs developers (and LLMs) love