Docs
Search docs

Get last-commit attribution for a tree

GET/api/repos/{owner}/{repo}/tree-commits

getRepositoryTreeCommits

Returns the most recent commit touching the selected path plus, per tree entry, the last first-parent commit that changed it — the data behind the file browser's commit columns.

Authentication is not described for this operation in the spec — that does not mean it is public. Check tokens and scopes.

curl

curl -X GET 'https://neosource.dev/api/repos/OWNER/REPO/tree-commits'

fetch

fetch("https://neosource.dev/api/repos/OWNER/REPO/tree-commits", {
  method: "GET",
});

Path parameters

ownerrequired

Repository owner or organization slug.

string

reporequired

Repository name.

string

Query parameters

ref

Bookmark name to read from. Defaults to the repository default branch.

string

path

Slash-delimited repository path relative to the selected ref root.

string

Responses

200Per-entry last-commit attribution

application/json

TreeCommitsResponse

object

Last-commit attribution for a tree page: the most recent commit touching the path (header bar) plus a per-entry attribution map. Served separately from the tree itself so the file list renders without waiting on the history walk.

completerequired

boolean

`false` when the history walk hit its depth cap before attributing every entry.

entriesrequired

array

Entries with a resolved last commit; entries missing here were not attributed within the walk budget.

items

TreeEntryCommitResponse

object

The most recent first-parent commit that touched one tree entry — the per-row "last commit message / age" columns of the file browser.

namerequired

string

Entry name within the tree (not a full path).

oidrequired

string

40-hex OID of the attributed commit.

summaryrequired

string

First line of the commit message.

timestamprequired

integerint64

Committer timestamp, epoch milliseconds.

latest
one of
pathrequired

string

refrequired

string

Standard errors

Bodies documented once for the whole API — see standard errors.

  • 400Bad Request — one of: invalid_input
  • 403Forbidden — one of: forbidden
  • 404Not Found — one of: not_found
  • 423Locked — one of: busy
  • 429Rate limited — retry after the interval in the `Retry-After` header
  • 500Internal server error
  • 503Service temporarily unavailable / at capacity — retry after the `Retry-After` header
  • 504Gateway timeout — the request exceeded the server's handling budget

Schemas

Referenced above. Listed here rather than expanded inline, so the same definition is not repeated at every level.

CommitSignatureResponse

object

emailrequired

string

namerequired

string

timestamprequired

integerint64

AuthorRef

object

A commit author/committer resolved to a platform account, matched at read time on a **verified** email. `None` when the commit's email is not a verified account (imported history, an unverified address, a bot) — the raw `name`/`email` on the signature is still rendered, as GitHub does.

account_idrequired

string

avatar_url

string | null

The account's uploaded avatar on the content origin, minted like `UserResponse::avatar_url`; absent when it has none, so the SPA paints the generated fallback without probing `/avatars/{handle}` first.

display_namerequired

string

emailrequired

string

handlerequired

string

CommitChecksSummary

object

Rollup of everything that checked a commit: workflow runs it triggered plus external statuses posted against it. `state` follows [`CommitStatusState::rollup`] — `failure` if anything failed, `pending` while anything is still in flight, `success` only when all green. The counts and `state` are PER RUN: every run on the commit, a re-run's superseded earlier attempts included, so a failed attempt re-run green still counts as failed here. `workflows` is the newest attempt of each workflow and can therefore disagree with them; a row's colours come from `workflows` + `statuses` alone.

failedrequired

integerint64

pendingrequired

integerint64

Includes `superseded`.

staterequired

CommitStatusState

string

State of a single commit status, GitHub-shaped. `Error` is distinct from `Failure` on individual statuses (infrastructure/tooling breakage vs. a real red result) but the combined rollup folds both into `Failure`.

"pending""success""failure""error"

statuses
one of
  • CommitStatusesSummary

    object

    The external commit statuses on one commit, rolled up as a single entry.

    staterequired

    CommitStatusState

    string

    State of a single commit status, GitHub-shaped. `Error` is distinct from `Failure` on individual statuses (infrastructure/tooling breakage vs. a real red result) but the combined rollup folds both into `Failure`.

    "pending""success""failure""error"

    totalrequired

    integerint64

  • null

succeededrequired

integerint64

supersededrequired

integerint64

Runs the merge queue superseded and cancelled (ADR 0160): they roll `state` up as `pending` (never green, never red) and are a SUBSET of `pending` (`superseded <= pending`) — the ones that will not resolve on their own.

totalrequired

integerint64

workflowsrequired

array

The same runs split by workflow: each workflow's newest run (latest attempt) on this commit, in row order (by path, then id). What a commit row paints one icon per; the counts above stay the roll-up.

items

WorkflowCheck

object

One workflow's newest run on a commit — one icon of a commit or PR row, beside the workflow's siblings, where a single roll-up would hide which workflow was red (`WorkflowVerdict` in neosource-core). Rows receive these already ordered: by `workflow_path`, then `workflow_id`, an unregistered workflow last — never by state.

run_idrequired

string

The newest run (latest attempt) of this workflow on the commit (UUID).

run_numberrequired

integerint64

skippedrequired

boolean

Every job of the run was skipped: `status` is `succeeded`, but no work ran.

statusrequired

WorkflowRunStatus

string

Lifecycle of a workflow run. Mirrors the GHA-shaped surface that the SPA renders. The serde `snake_case` strings are the wire vocabulary the API emits (pinned by the `enum_wire_consistency` tests).

"pending_approval""queued""quota_blocked""concurrency_blocked""running""cancelling""succeeded""failed""cancelled"

supersededrequired

boolean

The merge queue superseded and cancelled this run (ADR 0160): render neutral, neither red nor in flight.

workflow_idrequired

string

Workflow id (UUID).

workflow_namerequired

string

The workflow's declared `name:` as the run pinned it.

workflow_path

string | null

The workflow file's repo path; `null` when the workflow is no longer registered.

CommitPullRequestRef

object

The pull request a commit belongs to, resolved at read time by matching the commit against PR heads (`is_head = true`) and historical revision heads (`is_head = false`). `None` when the commit is not any PR's (current or past) head.

is_headrequired

boolean

`true` if this commit is the PR's current head; `false` if it is only a historical revision head.

numberrequired

integerint32

statusrequired

PullRequestStatus

string

Lifecycle status of a pull request.

"open""merged""closed"

titlerequired

string