GET /analytics/pull-requests
Return pull-request analytics.
Windowing: pass explicit start/end, or days (default: the last 30 days).
curl "https://api.ellipsis.dev/v1/analytics/pull-requests" \
-H "Authorization: Bearer $ELLIPSIS_API_KEY"{
"facets": {
"account_types": [
"string"
],
"authors": [
{
"account_type": "string",
"author_id": 0,
"avatar_url": "string",
"login": "string",
"prs": 0
}
],
"repos": [
{
"prs": 0,
"repository_id": 0,
"repository_name": "string"
}
]
},
"recent": [
{
"additions": 0,
"changed_files": 0,
"commits": 0,
"created_at": "2026-01-01T00:00:00Z",
"deletions": 0,
"head_ref": "string",
"head_sha": "string",
"html_url": "string",
"id": 0,
"merged_at": "2026-01-01T00:00:00Z",
"number": 0,
"repository_name": "string",
"status": "string",
"title": "string",
"user_avatar_url": "string",
"user_login": "string"
}
],
"series": [
{
"authors": 0,
"authors_bot": 0,
"authors_human": 0,
"closed": 0,
"commits": 0,
"commits_bot": 0,
"commits_human": 0,
"date": "string",
"lines": 0,
"lines_bot": 0,
"lines_human": 0,
"merge_time": {
"p0": 0,
"p100": 0,
"p25": 0,
"p50": 0,
"p75": 0
},
"merged": 0,
"prs": 0,
"prs_bot": 0,
"prs_human": 0
}
],
"totals": {
"active_authors": 0,
"commits": 0,
"lines": 0,
"merge_time_p50_hours": 0,
"merged": 0,
"prs": 0
},
"truncated": false
}import os
from ellipsis import Ellipsis
client = Ellipsis(api_key=os.environ["ELLIPSIS_API_TOKEN"])
result = client.analytics.pull_requests()
print(result){
"facets": {
"account_types": [
"string"
],
"authors": [
{
"account_type": "string",
"author_id": 0,
"avatar_url": "string",
"login": "string",
"prs": 0
}
],
"repos": [
{
"prs": 0,
"repository_id": 0,
"repository_name": "string"
}
]
},
"recent": [
{
"additions": 0,
"changed_files": 0,
"commits": 0,
"created_at": "2026-01-01T00:00:00Z",
"deletions": 0,
"head_ref": "string",
"head_sha": "string",
"html_url": "string",
"id": 0,
"merged_at": "2026-01-01T00:00:00Z",
"number": 0,
"repository_name": "string",
"status": "string",
"title": "string",
"user_avatar_url": "string",
"user_login": "string"
}
],
"series": [
{
"authors": 0,
"authors_bot": 0,
"authors_human": 0,
"closed": 0,
"commits": 0,
"commits_bot": 0,
"commits_human": 0,
"date": "string",
"lines": 0,
"lines_bot": 0,
"lines_human": 0,
"merge_time": {
"p0": 0,
"p100": 0,
"p25": 0,
"p50": 0,
"p75": 0
},
"merged": 0,
"prs": 0,
"prs_bot": 0,
"prs_human": 0
}
],
"totals": {
"active_authors": 0,
"commits": 0,
"lines": 0,
"merge_time_p50_hours": 0,
"merged": 0,
"prs": 0
},
"truncated": false
}import { Ellipsis } from '@ellipsis-dev/sdk';
const client = new Ellipsis({
apiKey: process.env.ELLIPSIS_API_TOKEN!,
});
const result = await client.analytics.pullRequests();
console.log(result);{
"facets": {
"account_types": [
"string"
],
"authors": [
{
"account_type": "string",
"author_id": 0,
"avatar_url": "string",
"login": "string",
"prs": 0
}
],
"repos": [
{
"prs": 0,
"repository_id": 0,
"repository_name": "string"
}
]
},
"recent": [
{
"additions": 0,
"changed_files": 0,
"commits": 0,
"created_at": "2026-01-01T00:00:00Z",
"deletions": 0,
"head_ref": "string",
"head_sha": "string",
"html_url": "string",
"id": 0,
"merged_at": "2026-01-01T00:00:00Z",
"number": 0,
"repository_name": "string",
"status": "string",
"title": "string",
"user_avatar_url": "string",
"user_login": "string"
}
],
"series": [
{
"authors": 0,
"authors_bot": 0,
"authors_human": 0,
"closed": 0,
"commits": 0,
"commits_bot": 0,
"commits_human": 0,
"date": "string",
"lines": 0,
"lines_bot": 0,
"lines_human": 0,
"merge_time": {
"p0": 0,
"p100": 0,
"p25": 0,
"p50": 0,
"p75": 0
},
"merged": 0,
"prs": 0,
"prs_bot": 0,
"prs_human": 0
}
],
"totals": {
"active_authors": 0,
"commits": 0,
"lines": 0,
"merge_time_p50_hours": 0,
"merged": 0,
"prs": 0
},
"truncated": false
}No request body.
{
"properties": {
"facets": {
"properties": {
"account_types": {
"items": {
"type": "string"
},
"type": "array"
},
"authors": {
"items": {
"properties": {
"account_type": {
"type": "string"
},
"author_id": {
"type": "integer"
},
"avatar_url": {
"type": "string"
},
"login": {
"type": "string"
},
"prs": {
"type": "integer"
}
},
"required": [
"author_id",
"login",
"avatar_url",
"account_type",
"prs"
],
"type": "object"
},
"type": "array"
},
"repos": {
"items": {
"properties": {
"prs": {
"type": "integer"
},
"repository_id": {
"type": "integer"
},
"repository_name": {
"type": "string"
}
},
"required": [
"repository_id",
"repository_name",
"prs"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"repos",
"authors",
"account_types"
],
"type": "object"
},
"recent": {
"items": {
"properties": {
"additions": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"changed_files": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"commits": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"created_at": {
"format": "date-time",
"type": "string"
},
"deletions": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"head_ref": {
"type": "string"
},
"head_sha": {
"type": "string"
},
"html_url": {
"type": "string"
},
"id": {
"type": "integer"
},
"merged_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"number": {
"type": "integer"
},
"repository_name": {
"type": "string"
},
"status": {
"type": "string"
},
"title": {
"type": "string"
},
"user_avatar_url": {
"type": "string"
},
"user_login": {
"type": "string"
}
},
"required": [
"id",
"number",
"title",
"status",
"repository_name",
"head_sha",
"head_ref",
"user_login",
"user_avatar_url",
"additions",
"deletions",
"changed_files",
"commits",
"created_at",
"merged_at",
"html_url"
],
"type": "object"
},
"type": "array"
},
"series": {
"items": {
"properties": {
"authors": {
"type": "integer"
},
"authors_bot": {
"type": "integer"
},
"authors_human": {
"type": "integer"
},
"closed": {
"type": "integer"
},
"commits": {
"type": "integer"
},
"commits_bot": {
"type": "integer"
},
"commits_human": {
"type": "integer"
},
"date": {
"type": "string"
},
"lines": {
"type": "integer"
},
"lines_bot": {
"type": "integer"
},
"lines_human": {
"type": "integer"
},
"merge_time": {
"properties": {
"p0": {
"type": "number"
},
"p100": {
"type": "number"
},
"p25": {
"type": "number"
},
"p50": {
"type": "number"
},
"p75": {
"type": "number"
}
},
"required": [
"p0",
"p25",
"p50",
"p75",
"p100"
],
"type": "object"
},
"merged": {
"type": "integer"
},
"prs": {
"type": "integer"
},
"prs_bot": {
"type": "integer"
},
"prs_human": {
"type": "integer"
}
},
"required": [
"date",
"prs",
"prs_human",
"prs_bot",
"merged",
"closed",
"lines",
"lines_human",
"lines_bot",
"commits",
"commits_human",
"commits_bot",
"authors",
"authors_human",
"authors_bot",
"merge_time"
],
"type": "object"
},
"type": "array"
},
"totals": {
"properties": {
"active_authors": {
"type": "integer"
},
"commits": {
"type": "integer"
},
"lines": {
"type": "integer"
},
"merge_time_p50_hours": {
"type": "number"
},
"merged": {
"type": "integer"
},
"prs": {
"type": "integer"
}
},
"required": [
"prs",
"merged",
"lines",
"commits",
"active_authors",
"merge_time_p50_hours"
],
"type": "object"
},
"truncated": {
"type": "boolean"
}
},
"required": [
"series",
"totals",
"facets",
"recent",
"truncated"
],
"type": "object"
}Request
daysinteger
startstring · date-time
endstring · date-time
account_typearray<string>
repository_idarray<integer>
author_idarray<integer>
statusarray<string>