Skip to content

Issue claims and boards

Claim issue work for a live run, release it, and update its GitHub projects.

OperationRequest
List issue claimsGET /v1/repos/{owner}/{name}/claims
Set an issue's project statusPUT /v1/repos/{owner}/{name}/issues/{n}/board
Claim an issuePUT /v1/repos/{owner}/{name}/issues/{n}/claim
Release an issue claimDELETE /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

NameInTypeRequiredDescription
ownerpathstringYes
namepathstringYes

Response

200 — Claims or a completed change.

Type: IssueClaimList

FieldTypeRequiredDescription
claimsarray of IssueClaimYes
claims[].repostringYes

GitHub owner/name.

claims[].issueintegerYes
claims[].holderstringYes

The session in the GitHub marker, or an agent for older unnamed claims.

claims[].runstring or nullYes

A matching run in this account, or null when none is known.

claims[].claimed_atinteger (int64)Yes

Unix milliseconds.

claims[].last_progress_atinteger (int64) or nullYes

Latest known comment, output, or progress time. A heartbeat alone is not progress.

Errors

StatusMeaningBody
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

NameInTypeRequiredDescription
ownerpathstringYes
namepathstringYes
npathintegerYes

Request body

Content type: application/json

Type: IssueBoard

FieldTypeRequiredDescription
statusone of "ready", "in_progress", "blocked", "done"Yes

Response

200 — Claims or a completed change.

Type: IssueOk

FieldTypeRequiredDescription
okalways trueYes

Errors

StatusMeaningBody
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

NameInTypeRequiredDescription
ownerpathstringYes
namepathstringYes
npathintegerYes

Request body

Content type: application/json

Type: IssueClaimRequest

FieldTypeRequiredDescription
holderstringYes
runstring or nullNo
batcharray of integerNo

Name every issue in the active batch, including this one. Omit for one issue or to keep the current named batch. Default: [].

forcebooleanNo

Replace another holder; never bypasses the batch limit. Default: false.

Response

200 — Claims or a completed change.

Type: IssueClaim

FieldTypeRequiredDescription
repostringYes

GitHub owner/name.

issueintegerYes
holderstringYes

The session in the GitHub marker, or an agent for older unnamed claims.

runstring or nullYes

A matching run in this account, or null when none is known.

claimed_atinteger (int64)Yes

Unix milliseconds.

last_progress_atinteger (int64) or nullYes

Latest known comment, output, or progress time. A heartbeat alone is not progress.

Errors

StatusMeaningBody
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

NameInTypeRequiredDescription
ownerpathstringYes
namepathstringYes
npathintegerYes

Request body

Content type: application/json

Type: IssueRelease

FieldTypeRequiredDescription
notestring or nullNo

At most 2,000 UTF-8 bytes.

Response

200 — Claims or a completed change.

Type: IssueOk

FieldTypeRequiredDescription
okalways trueYes

Errors

StatusMeaningBody
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"
}'

In the Rust SDK