Repositories & PRs
A project is one repository behind a GitHub App installation; every pull request on it is an object reviews, scorecards and plans point at.
A repository reaches IonWarp through a GitHub App installation. Creating a
project names both — repository: {full_name, installation_id} — and from then
on every pull request on it becomes an object here, the anchor for everything
downstream: reviews, scorecards and plans all point at a pull request.
Retrieve a pull-request — GET /api/v1/pull-requests/learning-tests-run-under-bun
curl "https://ionwarp.com/api/v1/pull-requests/learning-tests-run-under-bun" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_acme"Show me the review findings on PR {id}data_get {
"collection": "pull_requests",
"object_id": "learning-tests-run-under-bun"
}{
"object": "pull-request",
"id": "obj_123",
"number": 630,
"title": "Collapse the review dispatch fast path",
"state": "open",
"created_at": "2026-07-25T12:00:00.000Z",
"updated_at": "2026-07-25T12:00:00.000Z"
}Every field, filter and sort is in the
pull-requests reference. The ones worth
knowing by name: review_status and last_reviewed_at (where review got to),
last_review_run_id (the receipt to read), preview_url (the page a UX or
performance reviewer opens), and the auto_review_* block, which records
whether automatic review is on for this PR and, when it is off, who turned it
off and why.
What to know before you call it
Pull requests are read-only over the API: rows are written by the GitHub
App webhook and the repo sync, so create / update / delete answer
405 operation_not_supported. Connecting a repository end to end —
installation, repository, project — is
Connect GitHub.
Two event kinds decide whether a review dispatches: pulls.created (opened,
reopened, or marked ready for review) and pulls.updated (a new head pushed).
Repository identity — full name, installation, default branch — lives on the
project, never in a prompt.
A PR that IonWarp deliberately does not review says why rather than going
quiet: the reason is recorded on the row (auto_review_disabled_reason) or
named on the run (Debugging a Run). Drafts,
closed PRs, a head that was already reviewed, and titles matching
ionwarp.review.skip_pr_pattern are all skipped this way. A
skip_pr_pattern that will not compile matches nothing and reports itself —
config we cannot read never suppresses a review.
Next: Reviews to start one on a PR by hand · Reviewers & Models to pick the lineup · Plans for the work a repo proposes to itself.