neosourceDocs
Search docs

Get a pull request's diff

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

getPullRequestDiff

Unified diff of what the pull request introduces: a three-dot diff from the merge base of the target branch and the PR head, so commits the target branch gained after the PR was cut do not appear as reverts. Returns an empty file list (with `base_commit`/`head_commit` zeroed) when there is nothing to diff yet — a PR whose source branch has not been pushed, or one whose head is not present in this repository's object store (an open fork PR, whose objects are only imported at merge time). Subject to the same per-file and total-size caps as the commit diff endpoint; check `truncated`.

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

fetch

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

Path parameters

ownerrequired

Repository owner or organization slug.

string

reporequired

Repository name.

string

numberrequired

Change request number.

integerint32

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"