31 KiB
Gitea REST API Reference
Source: gitea-js v1.23.0 TypeScript declarations (generated from Gitea OpenAPI spec).
Base URL: https://<host>/api/v1
Auth
Header: Authorization: token <TOKEN> — Gitea requires the word token, not Bearer.
Token format: SHA1 hash string (40 hex chars), e.g. 9fcb1158165773dd010fca5f0cf7174316c3e37d.
Returned once on creation via POST /users/{username}/tokens; not stored in plain text.
Token scopes (Gitea 1.19+): fine-grained scopes like read:issue, write:repository, etc.
Older tokens have no scopes and are effectively admin-level for the user.
Pagination
All list endpoints use page (1-based, default 1) and limit (page size).
Not per_page — GitHub uses per_page, Gitea uses limit.
Response header: x-total-count (lowercase) — total item count across all pages.
Also returns a Link header with rel="next" / rel="last" URLs.
Issues
List Issues
GET /repos/{owner}/{repo}/issues
| Param | Type | Notes |
|---|---|---|
state |
open|closed|all |
default open |
type |
issues|pulls |
filter by type |
labels |
string | comma-separated label names |
milestones |
string | comma-separated milestone names or IDs |
since |
date-time | RFC 3339; updated after |
before |
date-time | RFC 3339; updated before |
created_by |
string | filter by creator username |
assigned_by |
string | filter by assignee username |
mentioned_by |
string | filter by mentioned username |
page |
int | 1-based |
limit |
int | page size |
Returns: Issue[]
Search Issues (cross-repo)
GET /repos/issues/search
| Param | Type | Notes |
|---|---|---|
state |
open|closed|all |
default open |
type |
issues|pulls |
|
labels |
string | comma-separated |
milestones |
string | comma-separated |
q |
string | search string |
priority_repo_id |
int64 | repo ID to rank higher |
since / before |
date-time | |
assigned |
bool | assigned to authed user |
created |
bool | created by authed user |
mentioned |
bool | mentioning authed user |
review_requested |
bool | review requested from authed user |
reviewed |
bool | reviewed by authed user |
owner |
string | filter by repo owner |
team |
string | requires owner |
page / limit |
int |
Returns: Issue[]
Get Issue
GET /repos/{owner}/{repo}/issues/{index}
Returns: Issue
Create Issue
POST /repos/{owner}/{repo}/issues
Body: CreateIssueOption
| Field | Type | Required | Notes |
|---|---|---|---|
title |
string | yes | |
body |
string | no | |
assignees |
string[] | no | usernames |
assignee |
string | no | deprecated, use assignees |
milestone |
int64 | no | milestone ID |
labels |
number[] | no | label IDs |
due_date |
date-time | no | only date part used |
closed |
bool | no | create already-closed |
ref |
string | no | branch/commit ref |
Returns: Issue (HTTP 201)
Edit Issue (close/reopen/update)
PATCH /repos/{owner}/{repo}/issues/{index}
Body: EditIssueOption
| Field | Type | Notes |
|---|---|---|
title |
string | |
body |
string | |
state |
string | "open" or "closed" — this is how you close/reopen |
assignees |
string[] | replaces all assignees |
assignee |
string | deprecated |
milestone |
int64 | milestone ID (0 to clear) |
due_date |
date-time | |
unset_due_date |
bool | set true to clear deadline |
ref |
string |
Returns: Issue
Delete Issue
DELETE /repos/{owner}/{repo}/issues/{index}
Returns: HTTP 204 (requires admin/owner)
Pin / Unpin Issue
POST /repos/{owner}/{repo}/issues/{index}/pin
DELETE /repos/{owner}/{repo}/issues/{index}/pin
No body. Returns: HTTP 204
Move Pin Position
PATCH /repos/{owner}/{repo}/issues/{index}/pin/{position}
position is a 1-based integer. Returns: HTTP 204
List Pinned Issues
GET /repos/{owner}/{repo}/issues/pinned
Returns: Issue[]
Check New Pin Allowed
GET /repos/{owner}/{repo}/new_pin_allowed
Returns: NewIssuePinsAllowed { issues: bool, pull_requests: bool }
Issue Object Schema
interface Issue {
id?: number; // global DB ID (not the display number)
number?: number; // repo-scoped issue number (use this in URLs)
title?: string;
body?: string;
state?: StateType; // "open" | "closed"
user?: User; // creator
assignee?: User;
assignees?: User[];
labels?: Label[];
milestone?: Milestone;
comments?: number; // comment count
created_at?: string; // ISO 8601
updated_at?: string;
closed_at?: string;
due_date?: string;
pull_request?: PullRequestMeta; // non-null if this issue is a PR
is_locked?: boolean;
pin_order?: number; // 0 if not pinned; position otherwise
ref?: string;
repository?: RepositoryMeta;
original_author?: string; // for migrated issues
original_author_id?: number;
html_url?: string;
url?: string;
assets?: Attachment[];
}
Gitea-specific vs GitHub:
numberis the repo-scoped index;idis the global DB ID. GitHub calls the display numbernumbertoo, but Gitea has both.pin_order— no GitHub equivalent.original_author/original_author_id— for migrated content, no GitHub equivalent.is_lockedis present but there's no dedicated lock/unlock endpoint in the public API.due_date— Gitea has native deadline support; GitHub does not.StateTypeis typed asstringin TypeScript; values are"open"and"closed".
Issue Dependencies (Blocking)
Gitea models two directions: A blocks B (A must be resolved before B), and A depends on B.
From any issue's perspective: /blocks = issues that this issue blocks, /dependencies = issues that block this issue.
List issues blocked BY this issue (this issue blocks them)
GET /repos/{owner}/{repo}/issues/{index}/blocks
Query: page, limit
Returns: Issue[] — the downstream issues that can't proceed until {index} is resolved.
Add a blocking relationship (make this issue block another)
POST /repos/{owner}/{repo}/issues/{index}/blocks
Body: IssueMeta { owner: string, repo: string, index: number }
Returns: Issue (the issue that is now blocked)
Note: {index} in the URL path is typed as string in gitea-js (accepts number as string).
Body IssueMeta.index is number.
Remove a blocking relationship
DELETE /repos/{owner}/{repo}/issues/{index}/blocks
Body: IssueMeta { owner: string, repo: string, index: number }
Returns: Issue
List dependencies of this issue (issues that block this one)
GET /repos/{owner}/{repo}/issues/{index}/dependencies
Query: page, limit
Returns: Issue[] — issues that must be resolved before {index} can proceed.
Add a dependency (make this issue depend on another)
POST /repos/{owner}/{repo}/issues/{index}/dependencies
Body: IssueMeta { owner: string, repo: string, index: number }
Returns: Issue
Remove a dependency
DELETE /repos/{owner}/{repo}/issues/{index}/dependencies
Body: IssueMeta { owner: string, repo: string, index: number }
Returns: Issue
Terminology clarification:
GET /issues/{index}/blocks→ "issues blocked by {index}" = downstream dependentsGET /issues/{index}/dependencies→ "issues blocking {index}" = upstream blockers- GitHub has no equivalent API; this is Gitea-only.
Issue Comments
List comments on an issue
GET /repos/{owner}/{repo}/issues/{index}/comments
| Param | Notes |
|---|---|
since |
date-time, RFC 3339 |
before |
date-time, RFC 3339 |
Returns: Comment[]
Note: no page/limit on this specific endpoint (lists all comments).
List all comments in a repo
GET /repos/{owner}/{repo}/issues/comments
Query: since, before, page, limit
Returns: Comment[]
Get single comment
GET /repos/{owner}/{repo}/issues/comments/{id}
Note: comment ID is the global DB ID, not a per-issue sequence.
Returns: Comment
Create comment
POST /repos/{owner}/{repo}/issues/{index}/comments
Body: { body: string } (required)
Returns: Comment
Edit comment
PATCH /repos/{owner}/{repo}/issues/comments/{id}
Body: { body: string } (required)
Returns: Comment
Deprecated variant: PATCH /repos/{owner}/{repo}/issues/{index}/comments/{id}
Delete comment
DELETE /repos/{owner}/{repo}/issues/comments/{id}
Deprecated variant: DELETE /repos/{owner}/{repo}/issues/{index}/comments/{id}
Comment schema
interface Comment {
id?: number; // global DB ID
body?: string;
user?: User;
created_at?: string;
updated_at?: string;
html_url?: string;
issue_url?: string;
pull_request_url?: string;
original_author?: string;
original_author_id?: number;
assets?: Attachment[];
}
Issue Timeline (comments + events)
GET /repos/{owner}/{repo}/issues/{index}/timeline
Query: since, before, page, limit
Returns: TimelineComment[] — includes all events (label changes, state changes, etc.) not just text comments.
Labels
Repo label CRUD
GET /repos/{owner}/{repo}/labels → Label[] (page, limit)
POST /repos/{owner}/{repo}/labels → Label (CreateLabelOption)
GET /repos/{owner}/{repo}/labels/{id} → Label
PATCH /repos/{owner}/{repo}/labels/{id} → Label (EditLabelOption)
DELETE /repos/{owner}/{repo}/labels/{id} → 204
Label schema
interface Label {
id?: number;
name?: string;
color?: string; // hex without #, e.g. "00aabb"
description?: string;
exclusive?: boolean; // Gitea-only: exclusive label (scoped labels)
is_archived?: boolean; // Gitea-only: archived/hidden label
url?: string;
}
Gitea-specific: exclusive labels are scoped — only one label with exclusive=true in a group can be applied at a time (like GitHub's scoped labels, but implemented differently). is_archived hides labels from UI while preserving existing uses.
CreateLabelOption
{ color: string, name: string, description?: string, exclusive?: boolean, is_archived?: boolean }
color must include the #, e.g. "#00aabb".
EditLabelOption
{ color?: string, name?: string, description?: string, exclusive?: boolean, is_archived?: boolean }
Labels on Issues/PRs
GET /repos/{owner}/{repo}/issues/{index}/labels → Label[]
POST /repos/{owner}/{repo}/issues/{index}/labels → Label[] (add labels)
PUT /repos/{owner}/{repo}/issues/{index}/labels → Label[] (replace all labels)
DELETE /repos/{owner}/{repo}/issues/{index}/labels → 204 (remove ALL labels)
DELETE /repos/{owner}/{repo}/issues/{index}/labels/{id} → 204 (remove one label)
Body for POST and PUT: IssueLabelsOption
interface IssueLabelsOption {
labels?: (number | string)[]; // label IDs or label names (mixed array supported)
}
Gitea-specific: Labels can be specified by ID (int) or by name (string) in the same array. GitHub only supports IDs.
Milestones
GET /repos/{owner}/{repo}/milestones → Milestone[]
POST /repos/{owner}/{repo}/milestones → Milestone
GET /repos/{owner}/{repo}/milestones/{id} → Milestone
PATCH /repos/{owner}/{repo}/milestones/{id} → Milestone
DELETE /repos/{owner}/{repo}/milestones/{id} → 204
List query params: state (open|closed|all), name (filter by name), page, limit.
Milestone schema
interface Milestone {
id?: number;
title?: string;
description?: string;
state?: StateType; // "open" | "closed"
open_issues?: number;
closed_issues?: number;
created_at?: string;
updated_at?: string;
closed_at?: string;
due_on?: string; // Note: GitHub calls this "due_on" too
}
CreateMilestoneOption
{ title?: string, description?: string, due_on?: date-time, state?: 'open'|'closed' }
EditMilestoneOption
{ title?: string, description?: string, due_on?: date-time, state?: string }
Pull Requests
List PRs
GET /repos/{owner}/{repo}/pulls
| Param | Type | Notes |
|---|---|---|
state |
open|closed|all |
default open |
sort |
string | oldest|recentupdate|leastupdate|mostcomment|leastcomment|priority |
milestone |
int64 | milestone ID |
labels |
number[] | label IDs |
poster |
string | filter by PR author username |
page |
int | 1-based |
limit |
int |
Returns: PullRequest[]
Get PR
GET /repos/{owner}/{repo}/pulls/{index}
Returns: PullRequest
Get PR by base and head
GET /repos/{owner}/{repo}/pulls/{base}/{head}
Returns: PullRequest
Create PR
POST /repos/{owner}/{repo}/pulls
Body: CreatePullRequestOption
| Field | Type | Notes |
|---|---|---|
title |
string | |
body |
string | |
head |
string | source branch (or fork:branch) |
base |
string | target branch |
assignees |
string[] | |
assignee |
string | deprecated |
labels |
number[] | label IDs |
milestone |
int64 | |
reviewers |
string[] | usernames |
team_reviewers |
string[] | team slugs |
due_date |
date-time | |
allow_maintainer_edit |
bool | (not in gitea-js CreatePullRequestOption but supported in API) |
Draft PR: The gitea-js CreatePullRequestOption does not include a draft field.
The underlying Go struct (CreatePullRequestOption) also has no draft field as of v1.23.
There is no API to create a draft PR or convert draft to ready. This is a known Gitea limitation.
Returns: PullRequest
Edit PR
PATCH /repos/{owner}/{repo}/pulls/{index}
Body: EditPullRequestOption
| Field | Type | Notes |
|---|---|---|
title |
string | |
body |
string | |
state |
string | "open" or "closed" to close/reopen |
base |
string | change target branch |
assignees |
string[] | replaces all |
assignee |
string | deprecated |
labels |
number[] | replaces all |
milestone |
int64 | |
due_date |
date-time | |
unset_due_date |
bool | clear deadline |
allow_maintainer_edit |
bool |
No draft or ready_for_review field. Draft status cannot be changed via API.
Returns: PullRequest
Get PR diff / patch
GET /repos/{owner}/{repo}/pulls/{index}.{diffType}
diffType: diff or patch
Query: binary (bool) — include binary changes (makes patch applicable via git apply)
Returns: raw string
Get PR commits
GET /repos/{owner}/{repo}/pulls/{index}/commits
Query: page, limit, verification (bool, default true), files (bool, default true)
Returns: Commit[]
Get changed files
GET /repos/{owner}/{repo}/pulls/{index}/files
| Param | Notes |
|---|---|
skip-to |
filename to start from (cursor-style) |
whitespace |
ignore-all|ignore-change|ignore-eol|show-all |
page, limit |
Returns: ChangedFile[]
Check if merged
GET /repos/{owner}/{repo}/pulls/{index}/merge
Returns: HTTP 204 if merged, HTTP 404 if not.
Merge PR
POST /repos/{owner}/{repo}/pulls/{index}/merge
Body: MergePullRequestOption
| Field | Type | Notes |
|---|---|---|
Do |
string | required: merge|rebase|rebase-merge|squash|fast-forward-only|manually-merged |
MergeCommitID |
string | for manually-merged |
MergeMessageField |
string | commit message body |
MergeTitleField |
string | commit message title |
delete_branch_after_merge |
bool | |
force_merge |
bool | override merge checks |
head_commit_id |
string | guard against race condition |
merge_when_checks_succeed |
bool | schedule auto-merge |
Gitea-specific: manually-merged value marks an already-merged PR without actually merging.
fast-forward-only is supported (not in GitHub API).
Cancel auto-merge
DELETE /repos/{owner}/{repo}/pulls/{index}/merge
Update PR branch (merge base into head)
POST /repos/{owner}/{repo}/pulls/{index}/update
Query: style — merge or rebase
PullRequest schema
interface PullRequest {
id?: number; // global DB ID
number?: number; // repo-scoped PR number
title?: string;
body?: string;
state?: StateType; // "open" | "closed"
draft?: boolean; // Gitea-specific: draft PR flag (read-only via API)
user?: User;
assignee?: User;
assignees?: User[];
labels?: Label[];
milestone?: Milestone;
base?: PRBranchInfo; // target branch info
head?: PRBranchInfo; // source branch info
merge_base?: string; // SHA of common ancestor
merge_commit_sha?: string; // SHA of merge commit (null if not merged)
merged?: boolean;
merged_at?: string;
merged_by?: User;
mergeable?: boolean;
allow_maintainer_edit?: boolean;
requested_reviewers?: User[];
requested_reviewers_teams?: Team[];
comments?: number;
review_comments?: number; // diff-level review comments only
additions?: number;
deletions?: number;
changed_files?: number;
created_at?: string;
updated_at?: string;
closed_at?: string;
due_date?: string;
diff_url?: string;
patch_url?: string;
html_url?: string;
url?: string;
is_locked?: boolean;
pin_order?: number;
}
interface PRBranchInfo {
label?: string; // "owner:branch"
ref?: string; // branch name
sha?: string; // HEAD SHA
repo_id?: number;
repo?: Repository;
}
Gitea-specific vs GitHub:
draftis present but read-only — cannot be set/changed via API.pin_order— no GitHub equivalent.allow_maintainer_edit— GitHub calls thismaintainer_can_modify.- GitHub has
review_decision(computed field); Gitea does not — you must compute approval state from the reviews list. - GitHub uses
head.repoandbase.repoas nested objects; Gitea uses the same pattern viaPRBranchInfo.repo. due_date— Gitea-only deadline field.
PR Reviews
List reviews
GET /repos/{owner}/{repo}/pulls/{index}/reviews
Query: page, limit
Returns: PullReview[]
Create review (or start a pending review)
POST /repos/{owner}/{repo}/pulls/{index}/reviews
Body: CreatePullReviewOptions
| Field | Type | Notes |
|---|---|---|
event |
ReviewStateType | APPROVED|REQUEST_CHANGES|COMMENT|PENDING |
body |
string | overall review comment |
commit_id |
string | commit to review at (defaults to head) |
comments |
CreatePullReviewComment[] | inline diff comments |
CreatePullReviewComment:
{
path?: string; // file path
body?: string; // comment text
new_position?: number; // line in new file (0 = not a line comment)
old_position?: number; // line in old file (0 = not a line comment)
}
To create a pending review (accumulate comments before submitting), pass event: "PENDING" or omit event.
Returns: PullReview
Get a review
GET /repos/{owner}/{repo}/pulls/{index}/reviews/{id}
Returns: PullReview
Submit (publish) a pending review
POST /repos/{owner}/{repo}/pulls/{index}/reviews/{id}
Body: SubmitPullReviewOptions
{ body?: string, event?: ReviewStateType }
event values: APPROVED, REQUEST_CHANGES, COMMENT
Returns: PullReview
Delete a review
DELETE /repos/{owner}/{repo}/pulls/{index}/reviews/{id}
Returns: HTTP 204
Get review inline comments
GET /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments
Returns: PullReviewComment[]
Dismiss a review
POST /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/dismissals
Body: DismissPullReviewOptions
{ message?: string, priors?: boolean }
priors: true dismisses all prior reviews from the same reviewer.
Returns: PullReview
Un-dismiss a review
POST /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/undismissals
Returns: PullReview
Request / cancel review requests
POST /repos/{owner}/{repo}/pulls/{index}/requested_reviewers → PullReview[]
DELETE /repos/{owner}/{repo}/pulls/{index}/requested_reviewers → 204
Body: PullReviewRequestOptions { reviewers?: string[], team_reviewers?: string[] }
PullReview schema
interface PullReview {
id?: number;
user?: User;
team?: Team; // for team review requests
body?: string; // overall comment text
state?: ReviewStateType; // "APPROVED" | "REQUEST_CHANGES" | "COMMENT" | "PENDING"
commit_id?: string; // commit SHA the review is on
submitted_at?: string;
updated_at?: string;
stale?: boolean; // GITEA-SPECIFIC: true if head has moved since review
official?: boolean; // GITEA-SPECIFIC: counts toward required approvals
dismissed?: boolean;
comments_count?: number;
html_url?: string;
pull_request_url?: string;
}
Gitea-specific vs GitHub:
official— whether this review counts toward branch protection required approvals. No GitHub equivalent.stale— whether the PR head has been updated since this review was submitted, making it outdated. GitHub shows this in UI but doesn't expose it as a field.- No
reviewDecisionequivalent — Gitea has no computed "overall review decision" field on the PR object. You must fetch all reviews and compute:- Count
APPROVEDreviews whereofficial=trueandstale=falseanddismissed=false. - Check if any
REQUEST_CHANGESreview isofficial=trueand not dismissed.
- Count
ReviewStateTypestring values:"APPROVED","REQUEST_CHANGES","COMMENT","PENDING"
PullReviewComment schema
interface PullReviewComment {
id?: number;
body?: string;
path?: string;
position?: number; // line in new file
original_position?: number; // line in old file
diff_hunk?: string; // context diff around the comment
commit_id?: string;
original_commit_id?: string;
pull_request_review_id?: number;
pull_request_url?: string;
user?: User;
resolver?: User; // GITEA-SPECIFIC: user who resolved the thread
created_at?: string;
updated_at?: string;
html_url?: string;
}
Commit Statuses (CI checks)
Gitea uses commit statuses (like GitHub's commit status API), not GitHub Check Runs.
There is no Gitea equivalent to GET /check-runs or GET /check-suites.
List statuses by ref (branch/tag/commit)
GET /repos/{owner}/{repo}/commits/{ref}/statuses
| Param | Notes |
|---|---|
sort |
oldest|recentupdate|leastupdate|leastindex|highestindex |
state |
pending|success|error|failure|warning |
page, limit |
Returns: CommitStatus[]
Get combined status by ref
GET /repos/{owner}/{repo}/commits/{ref}/status
Returns: CombinedStatus
interface CombinedStatus {
sha?: string;
state?: CommitStatusState; // overall: worst of all statuses
statuses?: CommitStatus[];
total_count?: number;
repository?: Repository;
commit_url?: string;
url?: string;
}
List statuses by SHA
GET /repos/{owner}/{repo}/statuses/{sha}
Same query params as above. Returns: CommitStatus[]
Create a commit status
POST /repos/{owner}/{repo}/statuses/{sha}
Body: CreateStatusOption
{
context?: string; // e.g. "ci/test" — identifies the check
state?: CommitStatusState; // "pending" | "success" | "error" | "failure"
description?: string;
target_url?: string; // link to build/CI page
}
Returns: CommitStatus
CommitStatus schema
interface CommitStatus {
id?: number;
context?: string; // identifier, e.g. "ci/build"
status?: CommitStatusState; // "pending" | "success" | "error" | "failure"
description?: string;
target_url?: string;
creator?: User;
created_at?: string;
updated_at?: string;
url?: string;
}
CommitStatusState values: "pending", "success", "error", "failure", "warning", "skipped"
Note: "warning" is valid in list/filter but the spec comment says "pending, success, error and failure" for CreateStatusOption — warning may not be creatable.
Note: "skipped" exists in current Gitea server code but is absent from older OpenAPI specs; older instances never emit it.
Gitea's own combine logic treats warning as a failing state and skipped as compatible with success.
For PR CI status: Use GET /repos/{owner}/{repo}/commits/{ref}/status where ref is the PR head SHA (pr.head.sha).
Projects
Gitea has a projects feature (kanban boards) but no REST API endpoints for projects are exposed as of v1.23.
project_idappears inTimelineComment(for "moved to project" events) but there's no CRUD API.- Repository settings expose
has_projects(bool) andprojects_mode("repo"|"owner"|"all"). - Project management must be done through the web UI.
GitHub comparison: GitHub has a full Projects v2 GraphQL API and Projects REST API. Gitea has neither.
Draft Pull Requests
Gitea supports draft PRs in the web UI but has significant API limitations:
- Cannot create a draft PR via API —
CreatePullRequestOptionhas nodraftfield. - Cannot convert draft to ready via API —
EditPullRequestOptionhas nodraftorready_for_reviewfield. - Can read draft status —
PullRequest.draftis a readable boolean field. - Workaround: Title prefix convention — some users prefix draft PR titles with
[WIP]orDraft:and remove the prefix to signal readiness, but this is not enforced by the API.
The op_type enum in activity includes pull_request_ready_for_review, indicating the feature exists in the event log, but no API to trigger this transition is exposed.
PR Comments (Review Comments vs Issue Comments)
Gitea separates:
-
Issue-style PR comments (general comments, not tied to diff lines):
GET/POST /repos/{owner}/{repo}/issues/{index}/comments- Same
Commentschema as issue comments.
-
Review comments (diff-level, tied to a review):
GET /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments- Created as part of
CreatePullReviewOptions.comments[]. - Schema:
PullReviewComment.
There is no endpoint to create a standalone review comment outside of a review (unlike GitHub's POST /pulls/{index}/comments).
Complete Endpoint Index (Relevant to gitea-axi)
Issues
| Method | Path | Notes |
|---|---|---|
| GET | /repos/{owner}/{repo}/issues |
list; type=issues for issues only |
| POST | /repos/{owner}/{repo}/issues |
create |
| GET | /repos/{owner}/{repo}/issues/{index} |
get |
| PATCH | /repos/{owner}/{repo}/issues/{index} |
edit; use state to close/reopen |
| DELETE | /repos/{owner}/{repo}/issues/{index} |
delete (admin) |
| POST | /repos/{owner}/{repo}/issues/{index}/pin |
pin |
| DELETE | /repos/{owner}/{repo}/issues/{index}/pin |
unpin |
| PATCH | /repos/{owner}/{repo}/issues/{index}/pin/{position} |
move pin |
| GET | /repos/{owner}/{repo}/issues/{index}/blocks |
list blocked issues |
| POST | /repos/{owner}/{repo}/issues/{index}/blocks |
add blocking |
| DELETE | /repos/{owner}/{repo}/issues/{index}/blocks |
remove blocking |
| GET | /repos/{owner}/{repo}/issues/{index}/dependencies |
list blockers |
| POST | /repos/{owner}/{repo}/issues/{index}/dependencies |
add dependency |
| DELETE | /repos/{owner}/{repo}/issues/{index}/dependencies |
remove dependency |
| GET | /repos/{owner}/{repo}/issues/{index}/comments |
list comments |
| POST | /repos/{owner}/{repo}/issues/{index}/comments |
add comment |
| GET | /repos/{owner}/{repo}/issues/comments/{id} |
get comment |
| PATCH | /repos/{owner}/{repo}/issues/comments/{id} |
edit comment |
| DELETE | /repos/{owner}/{repo}/issues/comments/{id} |
delete comment |
| GET | /repos/{owner}/{repo}/issues/{index}/timeline |
comments + events |
| GET | /repos/{owner}/{repo}/issues/{index}/labels |
get labels |
| POST | /repos/{owner}/{repo}/issues/{index}/labels |
add labels |
| PUT | /repos/{owner}/{repo}/issues/{index}/labels |
replace labels |
| DELETE | /repos/{owner}/{repo}/issues/{index}/labels |
clear all labels |
| DELETE | /repos/{owner}/{repo}/issues/{index}/labels/{id} |
remove one label |
| GET | /repos/issues/search |
cross-repo search |
| GET | /repos/{owner}/{repo}/issues/pinned |
list pinned |
Pull Requests
| Method | Path | Notes |
|---|---|---|
| GET | /repos/{owner}/{repo}/pulls |
list |
| POST | /repos/{owner}/{repo}/pulls |
create |
| GET | /repos/{owner}/{repo}/pulls/{index} |
get |
| PATCH | /repos/{owner}/{repo}/pulls/{index} |
edit |
| GET | /repos/{owner}/{repo}/pulls/{index}.diff |
get diff |
| GET | /repos/{owner}/{repo}/pulls/{index}.patch |
get patch |
| GET | /repos/{owner}/{repo}/pulls/{index}/commits |
get commits |
| GET | /repos/{owner}/{repo}/pulls/{index}/files |
get changed files |
| GET | /repos/{owner}/{repo}/pulls/{index}/merge |
check if merged |
| POST | /repos/{owner}/{repo}/pulls/{index}/merge |
merge |
| DELETE | /repos/{owner}/{repo}/pulls/{index}/merge |
cancel auto-merge |
| POST | /repos/{owner}/{repo}/pulls/{index}/update |
sync base into head |
| GET | /repos/{owner}/{repo}/pulls/{base}/{head} |
get by branches |
| GET | /repos/{owner}/{repo}/pulls/{index}/reviews |
list reviews |
| POST | /repos/{owner}/{repo}/pulls/{index}/reviews |
create review |
| GET | /repos/{owner}/{repo}/pulls/{index}/reviews/{id} |
get review |
| POST | /repos/{owner}/{repo}/pulls/{index}/reviews/{id} |
submit pending review |
| DELETE | /repos/{owner}/{repo}/pulls/{index}/reviews/{id} |
delete review |
| GET | /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments |
get review comments |
| POST | /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/dismissals |
dismiss review |
| POST | /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/undismissals |
undismiss review |
| POST | /repos/{owner}/{repo}/pulls/{index}/requested_reviewers |
request reviewers |
| DELETE | /repos/{owner}/{repo}/pulls/{index}/requested_reviewers |
cancel review request |
| GET | /repos/{owner}/{repo}/pulls/pinned |
list pinned PRs |
Labels
| Method | Path | Notes |
|---|---|---|
| GET | /repos/{owner}/{repo}/labels |
list |
| POST | /repos/{owner}/{repo}/labels |
create |
| GET | /repos/{owner}/{repo}/labels/{id} |
get |
| PATCH | /repos/{owner}/{repo}/labels/{id} |
update |
| DELETE | /repos/{owner}/{repo}/labels/{id} |
delete |
Milestones
| Method | Path | Notes |
|---|---|---|
| GET | /repos/{owner}/{repo}/milestones |
list (state, name, page, limit) |
| POST | /repos/{owner}/{repo}/milestones |
create |
| GET | /repos/{owner}/{repo}/milestones/{id} |
get |
| PATCH | /repos/{owner}/{repo}/milestones/{id} |
update |
| DELETE | /repos/{owner}/{repo}/milestones/{id} |
delete |
Commit Statuses
| Method | Path | Notes |
|---|---|---|
| GET | /repos/{owner}/{repo}/commits/{ref}/status |
combined status |
| GET | /repos/{owner}/{repo}/commits/{ref}/statuses |
list by ref |
| GET | /repos/{owner}/{repo}/statuses/{sha} |
list by SHA |
| POST | /repos/{owner}/{repo}/statuses/{sha} |
create status |