Pull Requests
Pull requests IonWarp is watching, and where each one got to in review.
Base path /api/v1/pull-requests on https://ionwarp.com. Authenticate with Authorization: Bearer $DASH_API_KEY and name the project with the Project-ID header. Writes are validated in declared mode; an operation this resource does not declare answers 405 operation_not_supported.
List pull requests
GET /api/v1/pull-requests
curl "https://ionwarp.com/api/v1/pull-requests?state=open" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_acme"Which pull requests are still waiting on changes?data_query {
"collection": "pull_requests",
"where": {
"state": "open"
}
}Returns a paginated list of pull-request objects, newest first.
{
"object": "list",
"data": [
{
"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"
}
],
"has_more": false,
"next_cursor": null
}Parameters
| Parameter | Type | Kind | Description |
|---|---|---|---|
state | string | filter | GitHub state of the PR at the last sync. One of open, closed, merged, draft. |
review_status | string | filter | The review-run lifecycle for this PR's latest review: planning → reviewing → reviews_available → summarizing → reviewed, with terminal alternatives skipped and errored. One writer (agents/ionwarp/server/pull-requests.ts) persists every transition; the Pull Requests list pill renders it 1:1. One of not_started, planning, reviewing, reviews_available, summarizing, reviewed, skipped, errored. |
author | string | filter | GitHub login that opened the PR. |
base_branch | string | filter | Branch the PR merges into. |
auto_review_enabled | boolean | filter | Whether IonWarp reviews new pushes to this PR automatically. Toggled by a PR comment command, not by an API write. |
q | string | search | Free-text search across title, head_branch. |
sort | string | sort | One of number, updated_at, last_reviewed_at; prefix with - to reverse. |
limit | number | page | Rows to return, 1–100. Defaults to 20. |
cursor | string | page | next_cursor from the previous page. |
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"
}Returns the pull-request object.
{
"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"
}Parameters
| Parameter | Type | Kind | Description |
|---|---|---|---|
id | string | path | The pull-request's id or slug. |
Append an event to a pull-request
POST /api/v1/pull-requests/{id}/events
curl -X POST "https://ionwarp.com/api/v1/pull-requests/learning-tests-run-under-bun/events" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_acme" \
-H "Content-Type: application/json" \
-d '{"event":"Noted by the operator","context":{"source":"api"}}'Add a note to the pull-request {id}data_event {
"collection": "pull_requests",
"object_id": "learning-tests-run-under-bun",
"event": "Noted by the operator"
}Returns the appended event object.
{
"object": "event",
"id": "evt_123",
"event": "Noted by the operator"
}Parameters
| Field | Type | Required | Description |
|---|---|---|---|
event | string | yes | The human-readable timeline entry. |
context | object | no | Provenance — source, integration, worker_run_id, … |
What comes back (read-only)
Every pull-request carries the envelope below. The fields under it are computed or stamped by the platform — they are returned, never sent.
| Field | Type | Description |
|---|---|---|
object | string | Always pull-request. |
id | string | Stable object id. Also accepted in place of slug on any path. |
slug | string | URL-safe name, unique within the collection. |
created_at | string | ISO-8601 timestamp of the first write. |
updated_at | string | ISO-8601 timestamp of the most recent write. The cursor sorts on this. |
number | number | GitHub pull request number. |
title | string | Pull request title, as it reads on GitHub. |
state | string | GitHub state of the PR at the last sync. |
author | string | GitHub login that opened the PR. |
author_avatar_url | string | GitHub avatar URL for author, resolved at sync time. |
head_branch | string | Branch the PR merges from. |
base_branch | string | Branch the PR merges into. |
url | string | Link to the PR on GitHub. |
preview_url | string | Deploy-preview URL reported for this PR, when the sync payload carried one. Used as the target of a UX review that runs against a live preview instead of the diff. |
review_status | string | The review-run lifecycle for this PR's latest review: planning → reviewing → reviews_available → summarizing → reviewed, with terminal alternatives skipped and errored. One writer (agents/ionwarp/server/pull-requests.ts) persists every transition; the Pull Requests list pill renders it 1:1. |
review_status_reason | string | Why the review skipped or errored — the SAME reason text the GitHub check title carries (e.g. "excluded author dependabot[bot]", "no reviewable diff", "review failed to run"). |
last_reviewed_at | string | When IonWarp last posted a review (ISO 8601). |
last_review_task_id | string | Task id of the most recent review run on this PR — the handle to look that run up. |
last_review_run_id | string | Run id of the most recent delivered review on this PR (the platform task_runs handle). |
last_reviewed_head_sha | string | Head SHA the most recent delivered review actually reviewed. The unchanged-SHA gate reads it to skip re-reviewing an unchanged head. |
last_review_agents_ran | number | Domain reviewer agents that ran in the most recent delivered review (conductor/learner excluded). |
last_review_high_signal_findings | number | High-significance (critical + major) findings the most recent delivered review produced. |
github_review_id | string | GitHub review id of the most recent posted review, when GitHub returned one. |
auto_review_enabled | boolean | Whether IonWarp reviews new pushes to this PR automatically. Toggled by a PR comment command, not by an API write. |
auto_review_disabled_by | string | GitHub login that turned auto-review off, when it is off. |
auto_review_disabled_at | string | When auto-review was turned off (ISO 8601). |
auto_review_disabled_reason | string | Reason given with the comment command that turned auto-review off. |
auto_review_last_command_at | string | When an auto-review comment command was last accepted on this PR (ISO 8601). |
auto_review_last_command_by | string | GitHub login that issued the last accepted auto-review comment command. |
active_swarm_id | string | The swarms row coordinating the review currently running on this PR, while one is running. |
active_task_id | string | The task currently reviewing this PR, while one is running. |
last_synced_at | string | When the PR was last synced from GitHub (ISO 8601). |
Errors
Failures use { error: { type, code, message, param } }. The full code table is generated at Error Codes.