Get board analytics
Throughput, cycle and lead time, cumulative flow, work in progress, overdue cards, review figures and a per-assignee breakdown, counted over the boards the caller can see.
With neither from nor to the range is the last 30 UTC days, today
included. A date (YYYY-MM-DD) is a UTC day and to names the last
day included; an RFC 3339 timestamp is an exact instant and to is
exclusive. A range may be at most 366 days. Ranges up to 48 hours are
bucketed by hour, longer ones by day.
Completed, cycle time and lead time are over the range; work in
progress, backlog, overdue and pending review are the boards as they
stand now. compare is null unless a comparison is asked for.
Requires the board:board:read scope.
Authorization
Parameters
Query parameters
fromstringStart of the range,YYYY-MM-DDor RFC 3339. Sent together withto.tostringEnd of the range,YYYY-MM-DD(included) or RFC 3339 (excluded). Sent together withfrom.comparestringAlso report the headline numbers of the previous period of the same length (previous) or the same range a year earlier (year).board_idstringCount only these boards, comma-separated, at most 100. Every one must be a board the caller can see, or the answer is 404.team_idstringCount only one team's boards — its own and the ones given to it.
Responses
200
The analytics.
dataBoardAnalyticsShow BoardAnalytics properties
rangeobjectfromstring (date-time)tostring (date-time)Exclusive.granularitystringtzstring
boardsarray of objectThe boards counted.idstringnamestringcard_prefixstringteam_idstring
totalsobjectcompletedintegercycle_timeDurationStatsShow DurationStats properties
countintegerp50_secondsnumber | nullp85_secondsnumber | nullp95_secondsnumber | nullavg_secondsnumber | null
lead_timeDurationStatsShow DurationStats properties
countintegerp50_secondsnumber | nullp85_secondsnumber | nullp95_secondsnumber | nullavg_secondsnumber | null
wipintegerbacklogintegeroverdueintegerpending_reviewinteger
throughputobjectseriesarray of objectCards finished per bucket.bucketstring (date-time)completedinteger
weeklyarray of objectCards finished per ISO week (Monday, UTC).partialis a week the range only partly covers.week_startstring (date-time)completedintegerpartialboolean
scatterarray of objectFinished cards with their cycle and lead time, the most recent 2,000.card_idstringboard_idstringreferencestringtitlestringcompleted_atstring (date-time)cycle_secondsnumberlead_secondsnumber
scatter_truncatedbooleancumulative_flowobjectHow many cards were in each list at the end of each bucket;countsalign withbuckets.bucketsarray of string (date-time)boardsarray of objectboard_idstringlistsarray of objectlist_idstringnamestringis_backlogbooleanThe board's first ordinary list, where cycle time starts.is_review_listbooleanis_done_listbooleanarchivedbooleancountsarray of integer
wiparray of objectWhat sits in each live list now.board_idstringlist_idstringnamestringis_backlogbooleanis_review_listbooleanis_done_listbooleancardsintegeroverdueintegerpending_reviewinteger
overdueobjectOpen cards past their due date, most overdue first, at most 100.totalintegercardsarray of objectcard_idstringboard_idstringlist_idstringreferencestringtitlestringdue_atstring (date-time)assigneesarray of string
truncatedboolean
reviewobjectThe review gate over the range.submittedintegerapprovedintegerrejectedintegerapproval_ratenumber | nullrework_cardsintegerCards rejected in the range that came back to review afterwards.rework_ratenumber | nulltime_in_reviewDurationStatsShow DurationStats properties
countintegerp50_secondsnumber | nullp85_secondsnumber | nullp95_secondsnumber | nullavg_secondsnumber | null
time_to_approvalDurationStatsShow DurationStats properties
countintegerp50_secondsnumber | nullp85_secondsnumber | nullp95_secondsnumber | nullavg_secondsnumber | null
time_to_rejectionDurationStatsShow DurationStats properties
countintegerp50_secondsnumber | nullp85_secondsnumber | nullp95_secondsnumber | nullavg_secondsnumber | null
pending_nowintegeroldest_pending_sincestring (date-time) | null
by_assigneearray of objectEach person's share.user_id""is the cards with nobody on them.user_idstringcompletedintegercycle_timeDurationStatsShow DurationStats properties
countintegerp50_secondsnumber | nullp85_secondsnumber | nullp95_secondsnumber | nullavg_secondsnumber | null
wipintegeroverdueinteger
compareobject | nullThe comparison period's headline numbers, ornull.modestringfromstring (date-time)tostring (date-time)completedintegercycle_timeDurationStatsShow DurationStats properties
countintegerp50_secondsnumber | nullp85_secondsnumber | nullp95_secondsnumber | nullavg_secondsnumber | null
lead_timeDurationStatsShow DurationStats properties
countintegerp50_secondsnumber | nullp85_secondsnumber | nullp95_secondsnumber | nullavg_secondsnumber | null
successboolean
400
A parameter is wrong (VALIDATION_FAILED; details names each
one): only one of from and to, a bound that is neither a date
nor RFC 3339, to not after from, a range over 366 days, an
unknown compare, or more than 100 boards.
errorobject requiredcodestring requiredmessagestring requireddetailsarray of object requiredfieldstringmessagestring
401
No API key was sent, or it is unknown, revoked or expired (UNAUTHORIZED).
errorobject requiredcodestring requiredmessagestring requiredrequest_idstring
403
The key lacks the scope this endpoint needs (FORBIDDEN).
errorobject requiredcodestring requiredmessagestring requiredrequest_idstring
404
A board_id names a board the caller cannot see (NOT_FOUND).
errorobject requiredcodestring requiredmessagestring requiredrequest_idstring
429
Too many requests (RATE_LIMITED). Wait for Retry-After seconds.
Retry-AfterintegerSeconds to wait before retrying.
errorobject requiredcodestring requiredmessagestring requiredrequest_idstring
500
Something went wrong on EvoHub's side (INTERNAL_ERROR). Retry later.
errorobject requiredcodestring requiredmessagestring requiredrequest_idstring
Example request
curl -X GET 'https://evohub.io/api/v1/board/analytics' \
-H 'Authorization: Bearer <TOKEN>'
