neosourceDocs
Search docs

Get diff between commits

GET/api/repos/{owner}/{repo}/diff

getRepositoryDiff

Returns a unified diff. Use `commit` for a single-commit diff (vs parent), or `base`/`head` for an arbitrary range. When using `base` without `head`, provide `ref` to resolve from a bookmark. Raw commit OIDs must be reachable from the selected repository.

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/diff'

fetch

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

Path parameters

ownerrequired

Repository owner or organization slug.

string

reporequired

Repository name.

string

Query parameters

commit

Single commit to diff against its parent. Mutually exclusive with `base`/`head`. Must be reachable from the selected repository.

string

base

Base commit OID (the "before" side). Must be reachable from the selected repository.

string

head

Head commit OID (the "after" side). Must be reachable from the selected repository.

string

ref

Bookmark name to resolve head from. Used with `base` when `head` is not a raw OID.

string

Responses

200Diff result

application/json

DiffResponse

object

base_commitrequired

string

filesrequired

array

items

DiffFileResponse

object

additions

integer | null

Added lines in this file, or `null` when the file was never line-counted: it is binary, or one side exceeds the per-file byte ceiling. `null` and `0` mean different things and must not be conflated — `0` is "changed, but no lines changed" (an empty file added or deleted, a mode-only change), which is a fact about the file, while `null` is a fact about the diff. Uncounted files contribute nothing to `DiffStatsResponse`, so the per-file counts sum to the aggregate over exactly the counted ones.

deletions

integer | null

Removed lines in this file. See [`DiffFileResponse::additions`].

is_binaryrequired

boolean

new_oid

string | null

old_oid

string | null

patch

string | null

Unified diff text for this file. Omitted for binary files.

pathrequired

string

statusrequired
DiffFileStatus
head_commitrequired

string

statsrequired

DiffStatsResponse

object

additionsrequired

integer

deletionsrequired

integer

files_changedrequired

integer

truncatedrequired

boolean

`true` when the file list was capped by a response-size guard (total patch bytes or file count). `stats` still reflects the full diff; `files` carries only the retained prefix. Mirrors `BlobResponse.truncated` — honest truncation over a silent partial diff.

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.

DiffFileStatus

string

"added""modified""deleted"