Issue claims and boards
Claim issue work for a live run, release it, and update its GitHub projects.
| Operation | Request |
|---|---|
| List issue claims | GET /v1/repos/{owner}/{name}/claims |
| Set an issue's project status | PUT /v1/repos/{owner}/{name}/issues/{n}/board |
| Claim an issue | PUT /v1/repos/{owner}/{name}/issues/{n}/claim |
| Release an issue claim | DELETE /v1/repos/{owner}/{name}/issues/{n}/claim |
List issue claims
GET /v1/repos/{owner}/{name}/claims · listIssueClaims
Uses the signed-in account's GitHub connection and repository access. Claims remain GitHub comment markers that the CLI reads. A claim must name one of this account's live runs by run ID, chat:run-ID, native harness session, or harness:session; name run explicitly if several live runs match. Runs with the same native session share one claim or a named batch of at most three issues in one repository, including across run IDs. Heartbeat receipt time determines liveness, not progress. An exact retry keeps the claim; a concurrent save returns 409. Closed or released issues free the holder's slots on its next claim. PUT claim posts the marker, adds the GitHub viewer as assignee, and moves each project to In Progress. DELETE posts a release marker, removes that assignee, and moves each project to Ready or Todo. Board Done changes status only; it does not close the issue. A GitHub failure can leave an earlier comment, assignee, or project change completed; retry to finish the remaining changes. Missing GitHub access returns 403. List includes other holders but joins run IDs only from this account. Reads inspect at most 1,000 open issue and pull request records, and the latest 1,000 comments per issue, stopping at the latest claim/release marker; longer histories return 422. At most 2,048 saved claims per account; dead run entries expire after 24 hours and unfinished saves after five minutes. Bodies are limited to 8 KiB. Responses are private and no-store.
Sign-in: a bearer credential in the Authorization header.
appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
owner | path | string | Yes | |
name | path | string | Yes |
Response
200 — Claims or a completed change.
Type: IssueClaimList
| Field | Type | Required | Description |
|---|---|---|---|
claims | array of IssueClaim | Yes | |
claims[].repo | string | Yes | GitHub owner/name. |
claims[].issue | integer | Yes | |
claims[].holder | string | Yes | The session in the GitHub marker, or an agent for older unnamed claims. |
claims[].run | string or null | Yes | A matching run in this account, or null when none is known. |
claims[].claimed_at | integer (int64) | Yes | Unix milliseconds. |
claims[].last_progress_at | integer (int64) or null | Yes | Latest known comment, output, or progress time. A heartbeat alone is not progress. |
Errors
| Status | Meaning | Body |
|---|---|---|
| 400, 401, 403, 404, 409, 413, 422, 429, 502, 503 | Invalid request, signed out, GitHub access denied, missing issue, claim conflict, oversized request, unsupported history or board, request limit, GitHub failure, or unavailable storage. | AppAccountError |
Example
curl 'https://api.openagents.com/v1/repos/{owner}/{name}/claims' \
-H "Authorization: Bearer $OPENAGENTS_TOKEN"
In the Rust SDK
Set an issue's project status
PUT /v1/repos/{owner}/{name}/issues/{n}/board · setIssueBoard
Uses the signed-in account's GitHub connection and repository access. Claims remain GitHub comment markers that the CLI reads. A claim must name one of this account's live runs by run ID, chat:run-ID, native harness session, or harness:session; name run explicitly if several live runs match. Runs with the same native session share one claim or a named batch of at most three issues in one repository, including across run IDs. Heartbeat receipt time determines liveness, not progress. An exact retry keeps the claim; a concurrent save returns 409. Closed or released issues free the holder's slots on its next claim. PUT claim posts the marker, adds the GitHub viewer as assignee, and moves each project to In Progress. DELETE posts a release marker, removes that assignee, and moves each project to Ready or Todo. Board Done changes status only; it does not close the issue. A GitHub failure can leave an earlier comment, assignee, or project change completed; retry to finish the remaining changes. Missing GitHub access returns 403. List includes other holders but joins run IDs only from this account. Reads inspect at most 1,000 open issue and pull request records, and the latest 1,000 comments per issue, stopping at the latest claim/release marker; longer histories return 422. At most 2,048 saved claims per account; dead run entries expire after 24 hours and unfinished saves after five minutes. Bodies are limited to 8 KiB. Responses are private and no-store.
Sign-in: a bearer credential in the Authorization header.
appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
owner | path | string | Yes | |
name | path | string | Yes | |
n | path | integer | Yes |
Request body
Content type: application/json
Type: IssueBoard
| Field | Type | Required | Description |
|---|---|---|---|
status | one of "ready", "in_progress", "blocked", "done" | Yes |
Response
200 — Claims or a completed change.
Type: IssueOk
| Field | Type | Required | Description |
|---|---|---|---|
ok | always true | Yes |
Errors
| Status | Meaning | Body |
|---|---|---|
| 400, 401, 403, 404, 409, 413, 422, 429, 502, 503 | Invalid request, signed out, GitHub access denied, missing issue, claim conflict, oversized request, unsupported history or board, request limit, GitHub failure, or unavailable storage. | AppAccountError |
Example
curl -X PUT 'https://api.openagents.com/v1/repos/{owner}/{name}/issues/{n}/board' \
-H "Authorization: Bearer $OPENAGENTS_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"status": "ready"
}'
In the Rust SDK
Claim an issue
PUT /v1/repos/{owner}/{name}/issues/{n}/claim · claimIssue
Uses the signed-in account's GitHub connection and repository access. Claims remain GitHub comment markers that the CLI reads. A claim must name one of this account's live runs by run ID, chat:run-ID, native harness session, or harness:session; name run explicitly if several live runs match. Runs with the same native session share one claim or a named batch of at most three issues in one repository, including across run IDs. Heartbeat receipt time determines liveness, not progress. An exact retry keeps the claim; a concurrent save returns 409. Closed or released issues free the holder's slots on its next claim. PUT claim posts the marker, adds the GitHub viewer as assignee, and moves each project to In Progress. DELETE posts a release marker, removes that assignee, and moves each project to Ready or Todo. Board Done changes status only; it does not close the issue. A GitHub failure can leave an earlier comment, assignee, or project change completed; retry to finish the remaining changes. Missing GitHub access returns 403. List includes other holders but joins run IDs only from this account. Reads inspect at most 1,000 open issue and pull request records, and the latest 1,000 comments per issue, stopping at the latest claim/release marker; longer histories return 422. At most 2,048 saved claims per account; dead run entries expire after 24 hours and unfinished saves after five minutes. Bodies are limited to 8 KiB. Responses are private and no-store.
Sign-in: a bearer credential in the Authorization header.
appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
owner | path | string | Yes | |
name | path | string | Yes | |
n | path | integer | Yes |
Request body
Content type: application/json
Type: IssueClaimRequest
| Field | Type | Required | Description |
|---|---|---|---|
holder | string | Yes | |
run | string or null | No | |
batch | array of integer | No | Name every issue in the active batch, including this one. Omit for one issue or to keep the current named batch. Default: |
force | boolean | No | Replace another holder; never bypasses the batch limit. Default: |
Response
200 — Claims or a completed change.
Type: IssueClaim
| Field | Type | Required | Description |
|---|---|---|---|
repo | string | Yes | GitHub owner/name. |
issue | integer | Yes | |
holder | string | Yes | The session in the GitHub marker, or an agent for older unnamed claims. |
run | string or null | Yes | A matching run in this account, or null when none is known. |
claimed_at | integer (int64) | Yes | Unix milliseconds. |
last_progress_at | integer (int64) or null | Yes | Latest known comment, output, or progress time. A heartbeat alone is not progress. |
Errors
| Status | Meaning | Body |
|---|---|---|
| 400, 401, 403, 404, 409, 413, 422, 429, 502, 503 | Invalid request, signed out, GitHub access denied, missing issue, claim conflict, oversized request, unsupported history or board, request limit, GitHub failure, or unavailable storage. | AppAccountError |
Example
curl -X PUT 'https://api.openagents.com/v1/repos/{owner}/{name}/issues/{n}/claim' \
-H "Authorization: Bearer $OPENAGENTS_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"holder": "string"
}'
In the Rust SDK
Release an issue claim
DELETE /v1/repos/{owner}/{name}/issues/{n}/claim · releaseIssueClaim
Uses the signed-in account's GitHub connection and repository access. Claims remain GitHub comment markers that the CLI reads. A claim must name one of this account's live runs by run ID, chat:run-ID, native harness session, or harness:session; name run explicitly if several live runs match. Runs with the same native session share one claim or a named batch of at most three issues in one repository, including across run IDs. Heartbeat receipt time determines liveness, not progress. An exact retry keeps the claim; a concurrent save returns 409. Closed or released issues free the holder's slots on its next claim. PUT claim posts the marker, adds the GitHub viewer as assignee, and moves each project to In Progress. DELETE posts a release marker, removes that assignee, and moves each project to Ready or Todo. Board Done changes status only; it does not close the issue. A GitHub failure can leave an earlier comment, assignee, or project change completed; retry to finish the remaining changes. Missing GitHub access returns 403. List includes other holders but joins run IDs only from this account. Reads inspect at most 1,000 open issue and pull request records, and the latest 1,000 comments per issue, stopping at the latest claim/release marker; longer histories return 422. At most 2,048 saved claims per account; dead run entries expire after 24 hours and unfinished saves after five minutes. Bodies are limited to 8 KiB. Responses are private and no-store.
Sign-in: a bearer credential in the Authorization header.
appBearer: A live app sess_ session or oa_sk_ sign-in key. Account-bound oak_ keys are accepted only where the operation declares them and their scopes permit it. API cookies are ignored.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
owner | path | string | Yes | |
name | path | string | Yes | |
n | path | integer | Yes |
Request body
Content type: application/json
Type: IssueRelease
| Field | Type | Required | Description |
|---|---|---|---|
note | string or null | No | At most 2,000 UTF-8 bytes. |
Response
200 — Claims or a completed change.
Type: IssueOk
| Field | Type | Required | Description |
|---|---|---|---|
ok | always true | Yes |
Errors
| Status | Meaning | Body |
|---|---|---|
| 400, 401, 403, 404, 409, 413, 422, 429, 502, 503 | Invalid request, signed out, GitHub access denied, missing issue, claim conflict, oversized request, unsupported history or board, request limit, GitHub failure, or unavailable storage. | AppAccountError |
Example
curl -X DELETE 'https://api.openagents.com/v1/repos/{owner}/{name}/issues/{n}/claim' \
-H "Authorization: Bearer $OPENAGENTS_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"note": "string"
}'