Forgejo repository API

The repository API from Forgejo — 126 operation(s) for repository.

Operations 198

POST /repos/migrate Migrate a remote git repository #
GET /repos/search Search for repositories #
GET /repos/{owner}/{repo} Get a repository #
DELETE /repos/{owner}/{repo} Delete a repository #
PATCH /repos/{owner}/{repo} Edit a repository's properties. Only fields that are set will be changed. #
GET /repos/{owner}/{repo}/actions/artifacts List a repository's artifacts #
GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id} Get an artifact by ID #
DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id} Mark an artifact for deletion #
GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/zip Download an artifact #
GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs Download the plaintext logs of an action job #
GET /repos/{owner}/{repo}/actions/runners Get runners belonging to the repository #
POST /repos/{owner}/{repo}/actions/runners Register a new repository-level runner #
GET /repos/{owner}/{repo}/actions/runners/jobs Search for repository's action jobs according filter conditions #
GET /repos/{owner}/{repo}/actions/runners/registration-token Get a repository's runner registration token #
GET /repos/{owner}/{repo}/actions/runners/{runner_id} Get a particular runner that belongs to the repository #
DELETE /repos/{owner}/{repo}/actions/runners/{runner_id} Delete a particular runner that belongs to a repository #
GET /repos/{owner}/{repo}/actions/runs List a repository's action runs #
GET /repos/{owner}/{repo}/actions/runs/{run_id} Get an action run #
DELETE /repos/{owner}/{repo}/actions/runs/{run_id} Delete a completed workflow run. #
GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts List artifacts of a workflow run #
POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel Cancel a pending or running workflow run. #
GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs List jobs of a workflow run #
GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs Download a ZIP of plaintext logs for every job in an action run #
GET /repos/{owner}/{repo}/actions/secrets List an repo's actions secrets #
PUT /repos/{owner}/{repo}/actions/secrets/{secretname} Create or Update a secret value in a repository #
DELETE /repos/{owner}/{repo}/actions/secrets/{secretname} Delete a secret in a repository #
GET /repos/{owner}/{repo}/actions/tasks List a repository's action tasks #
GET /repos/{owner}/{repo}/actions/variables Get repo-level variables list #
GET /repos/{owner}/{repo}/actions/variables/{variablename} Get a repo-level variable #
PUT /repos/{owner}/{repo}/actions/variables/{variablename} Update a repo-level variable #
POST /repos/{owner}/{repo}/actions/variables/{variablename} Create a repo-level variable #
DELETE /repos/{owner}/{repo}/actions/variables/{variablename} Delete a repo-level variable #
POST /repos/{owner}/{repo}/actions/workflows/{workflowfilename}/dispatches Dispatches a workflow #
GET /repos/{owner}/{repo}/activities/feeds List a repository's activity feeds #
GET /repos/{owner}/{repo}/archive/{archive} Get an archive of a repository #
GET /repos/{owner}/{repo}/assignees Return all users that have write access and can be assigned to issues #
POST /repos/{owner}/{repo}/avatar Update a repository's avatar #
DELETE /repos/{owner}/{repo}/avatar Delete a repository's avatar #
GET /repos/{owner}/{repo}/branch_protections List branch protections for a repository #
POST /repos/{owner}/{repo}/branch_protections Create a branch protections for a repository #
GET /repos/{owner}/{repo}/branch_protections/{name} Get a specific branch protection for the repository #
DELETE /repos/{owner}/{repo}/branch_protections/{name} Delete a specific branch protection for the repository #
PATCH /repos/{owner}/{repo}/branch_protections/{name} Edit a branch protections for a repository. Only fields that are set will be changed #
GET /repos/{owner}/{repo}/branches List a repository's branches #
POST /repos/{owner}/{repo}/branches Create a branch #
GET /repos/{owner}/{repo}/branches/{branch} Retrieve a specific branch from a repository, including its effective branch protection #
DELETE /repos/{owner}/{repo}/branches/{branch} Delete a specific branch from a repository #
PATCH /repos/{owner}/{repo}/branches/{branch} Update a branch #
GET /repos/{owner}/{repo}/collaborators List a repository's collaborators #
GET /repos/{owner}/{repo}/collaborators/{collaborator} Check if a user is a collaborator of a repository #
PUT /repos/{owner}/{repo}/collaborators/{collaborator} Add a collaborator to a repository #
DELETE /repos/{owner}/{repo}/collaborators/{collaborator} Delete a collaborator from a repository #
GET /repos/{owner}/{repo}/collaborators/{collaborator}/permission Get repository permissions for a user #
GET /repos/{owner}/{repo}/commits Get a list of all commits from a repository #
GET /repos/{owner}/{repo}/commits/{ref}/status Get a commit's combined status, by branch/tag/commit reference #
GET /repos/{owner}/{repo}/commits/{ref}/statuses Get a commit's statuses, by branch/tag/commit reference #
GET /repos/{owner}/{repo}/commits/{sha}/pull Get the pull request of the commit #
GET /repos/{owner}/{repo}/compare/{basehead} Get commit comparison information #
GET /repos/{owner}/{repo}/contents Gets the metadata of all the entries of the root dir #
POST /repos/{owner}/{repo}/contents Modify multiple files in a repository #
GET /repos/{owner}/{repo}/contents/{filepath} Gets the metadata and contents (if a file) of an entry in a repository, or a list of entries if a dir #
PUT /repos/{owner}/{repo}/contents/{filepath} Update a file in a repository #
POST /repos/{owner}/{repo}/contents/{filepath} Create a file in a repository #
DELETE /repos/{owner}/{repo}/contents/{filepath} Delete a file in a repository #
POST /repos/{owner}/{repo}/convert Convert a mirror repo to a normal repo. #
POST /repos/{owner}/{repo}/diffpatch Apply diff patch to repository #
GET /repos/{owner}/{repo}/editorconfig/{filepath} Get the EditorConfig definitions of a file in a repository #
GET /repos/{owner}/{repo}/flags List a repository's flags #
PUT /repos/{owner}/{repo}/flags Replace all flags of a repository #
DELETE /repos/{owner}/{repo}/flags Remove all flags from a repository #
GET /repos/{owner}/{repo}/flags/{flag} Check if a repository has a given flag #
PUT /repos/{owner}/{repo}/flags/{flag} Add a flag to a repository #
DELETE /repos/{owner}/{repo}/flags/{flag} Remove a flag from a repository #
GET /repos/{owner}/{repo}/forks List a repository's forks #
POST /repos/{owner}/{repo}/forks Fork a repository #
GET /repos/{owner}/{repo}/git/blobs Gets multiple blobs of a repository. #
GET /repos/{owner}/{repo}/git/blobs/{sha} Gets the blob of a repository. #
GET /repos/{owner}/{repo}/git/commits/{sha} Get a single commit from a repository #
GET /repos/{owner}/{repo}/git/commits/{sha}.{diffType} Get a commit's diff or patch #
GET /repos/{owner}/{repo}/git/notes/{sha} Get a note corresponding to a single commit from a repository #
POST /repos/{owner}/{repo}/git/notes/{sha} Set a note corresponding to a single commit from a repository #
DELETE /repos/{owner}/{repo}/git/notes/{sha} Removes a note corresponding to a single commit from a repository #
GET /repos/{owner}/{repo}/git/refs Get specified ref or filtered repository's refs #
GET /repos/{owner}/{repo}/git/refs/{ref} Get specified ref or filtered repository's refs #
GET /repos/{owner}/{repo}/git/tags/{sha} Gets the tag object of an annotated tag (not lightweight tags) #
GET /repos/{owner}/{repo}/git/trees/{sha} Gets the tree of a repository. #
GET /repos/{owner}/{repo}/hooks List the hooks in a repository #
POST /repos/{owner}/{repo}/hooks Create a hook #
GET /repos/{owner}/{repo}/hooks/git List the Git hooks in a repository #
GET /repos/{owner}/{repo}/hooks/git/{id} Get a Git hook #
DELETE /repos/{owner}/{repo}/hooks/git/{id} Delete a Git hook in a repository #
PATCH /repos/{owner}/{repo}/hooks/git/{id} Edit a Git hook in a repository #
GET /repos/{owner}/{repo}/hooks/{id} Get a hook #
DELETE /repos/{owner}/{repo}/hooks/{id} Delete a hook in a repository #
PATCH /repos/{owner}/{repo}/hooks/{id} Edit a hook in a repository #
POST /repos/{owner}/{repo}/hooks/{id}/tests Test a push webhook #
GET /repos/{owner}/{repo}/issue_config Returns the issue config for a repo #
GET /repos/{owner}/{repo}/issue_config/validate Returns the validation information for a issue config #
GET /repos/{owner}/{repo}/issue_templates Get available issue templates for a repository #
GET /repos/{owner}/{repo}/issues/pinned List a repo's pinned issues #
GET /repos/{owner}/{repo}/keys List a repository's keys #
POST /repos/{owner}/{repo}/keys Add a key to a repository #
GET /repos/{owner}/{repo}/keys/{id} Get a repository's key by id #
DELETE /repos/{owner}/{repo}/keys/{id} Delete a key from a repository #
GET /repos/{owner}/{repo}/languages Get languages and number of bytes of code written #
GET /repos/{owner}/{repo}/media/{filepath} Get a file or it's LFS object from a repository #
POST /repos/{owner}/{repo}/mirror-sync Sync a mirrored repository #
GET /repos/{owner}/{repo}/new_pin_allowed Returns if new Issue Pins are allowed #
GET /repos/{owner}/{repo}/pulls List a repo's pull requests. If a pull request is selected but fails to be retrieved for any reason, it will be a null value in the list of results. #
POST /repos/{owner}/{repo}/pulls Create a pull request #
GET /repos/{owner}/{repo}/pulls/pinned List a repo's pinned pull requests #
GET /repos/{owner}/{repo}/pulls/{base}/{head} Get a pull request by base and head #
GET /repos/{owner}/{repo}/pulls/{index} Get a pull request #
PATCH /repos/{owner}/{repo}/pulls/{index} Update a pull request. If using deadline only the date will be taken into account, and time of day ignored. #
GET /repos/{owner}/{repo}/pulls/{index}.{diffType} Get a pull request diff or patch #
GET /repos/{owner}/{repo}/pulls/{index}/commits Get commits for a pull request #
GET /repos/{owner}/{repo}/pulls/{index}/files Get changed files for a pull request #
GET /repos/{owner}/{repo}/pulls/{index}/merge Check if a pull request has been merged #
POST /repos/{owner}/{repo}/pulls/{index}/merge Merge a pull request #
DELETE /repos/{owner}/{repo}/pulls/{index}/merge Cancel the scheduled auto merge for the given pull request #
POST /repos/{owner}/{repo}/pulls/{index}/requested_reviewers Create review requests for a pull request #
DELETE /repos/{owner}/{repo}/pulls/{index}/requested_reviewers Cancel review requests for a pull request #
GET /repos/{owner}/{repo}/pulls/{index}/reviews List all reviews for a pull request #
POST /repos/{owner}/{repo}/pulls/{index}/reviews Create a review to an pull request #
GET /repos/{owner}/{repo}/pulls/{index}/reviews/{id} Get a specific review for a pull request #
POST /repos/{owner}/{repo}/pulls/{index}/reviews/{id} Submit a pending review to an pull request #
DELETE /repos/{owner}/{repo}/pulls/{index}/reviews/{id} Delete a specific review from a pull request #
GET /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments Get a specific review for a pull request #
POST /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments Add a new comment to a pull request review #
GET /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments/{comment} Get a pull review comment #
DELETE /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments/{comment} Delete a pull review comment #
POST /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/dismissals Dismiss a review for a pull request #
POST /repos/{owner}/{repo}/pulls/{index}/reviews/{id}/undismissals Cancel to dismiss a review for a pull request #
POST /repos/{owner}/{repo}/pulls/{index}/update Merge PR's baseBranch into headBranch #
GET /repos/{owner}/{repo}/push_mirrors Get all push mirrors of the repository #
POST /repos/{owner}/{repo}/push_mirrors Set up a new push mirror in a repository #
POST /repos/{owner}/{repo}/push_mirrors-sync Sync all push mirrored repository #
GET /repos/{owner}/{repo}/push_mirrors/{name} Get push mirror of the repository by remoteName #
DELETE /repos/{owner}/{repo}/push_mirrors/{name} Remove a push mirror from a repository by remoteName #
GET /repos/{owner}/{repo}/raw/{filepath} Get a file from a repository #
GET /repos/{owner}/{repo}/releases List a repo's releases #
POST /repos/{owner}/{repo}/releases Create a release #
GET /repos/{owner}/{repo}/releases/latest Gets the most recent non-prerelease, non-draft release of a repository, sorted by created_at #
GET /repos/{owner}/{repo}/releases/tags/{tag} Get a release by tag name #
DELETE /repos/{owner}/{repo}/releases/tags/{tag} Delete a release by tag name #
GET /repos/{owner}/{repo}/releases/{id} Get a release #
DELETE /repos/{owner}/{repo}/releases/{id} Delete a release #
PATCH /repos/{owner}/{repo}/releases/{id} Update a release #
GET /repos/{owner}/{repo}/releases/{id}/assets List release's attachments #
POST /repos/{owner}/{repo}/releases/{id}/assets Create a release attachment #
GET /repos/{owner}/{repo}/releases/{id}/assets/{attachment_id} Get a release attachment #
DELETE /repos/{owner}/{repo}/releases/{id}/assets/{attachment_id} Delete a release attachment #
PATCH /repos/{owner}/{repo}/releases/{id}/assets/{attachment_id} Edit a release attachment #
GET /repos/{owner}/{repo}/reviewers Return all users that can be requested to review in this repo #
GET /repos/{owner}/{repo}/signing-key.gpg Get signing-key.gpg for given repository #
GET /repos/{owner}/{repo}/stargazers List a repo's stargazers #
GET /repos/{owner}/{repo}/statuses/{sha} Get a commit's statuses #
POST /repos/{owner}/{repo}/statuses/{sha} Create a commit status #
GET /repos/{owner}/{repo}/subscribers List a repo's watchers #
GET /repos/{owner}/{repo}/subscription Check if the current user is watching a repo #
PUT /repos/{owner}/{repo}/subscription Watch a repo #
DELETE /repos/{owner}/{repo}/subscription Unwatch a repo #
GET /repos/{owner}/{repo}/sync_fork Gets information about syncing the fork default branch with the base branch #
POST /repos/{owner}/{repo}/sync_fork Syncs the default branch of a fork with the base branch #
GET /repos/{owner}/{repo}/sync_fork/{branch} Gets information about syncing a fork branch with the base branch #
POST /repos/{owner}/{repo}/sync_fork/{branch} Syncs a fork branch with the base branch #
GET /repos/{owner}/{repo}/tag_protections List tag protections for a repository #
POST /repos/{owner}/{repo}/tag_protections Create a tag protections for a repository #
GET /repos/{owner}/{repo}/tag_protections/{id} Get a specific tag protection for the repository #
DELETE /repos/{owner}/{repo}/tag_protections/{id} Delete a specific tag protection for the repository #
PATCH /repos/{owner}/{repo}/tag_protections/{id} Edit a tag protections for a repository. Only fields that are set will be changed #
GET /repos/{owner}/{repo}/tags List a repository's tags #
POST /repos/{owner}/{repo}/tags Create a new git tag in a repository #
GET /repos/{owner}/{repo}/tags/{tag} Get the tag of a repository by tag name #
DELETE /repos/{owner}/{repo}/tags/{tag} Delete a repository's tag by name #
GET /repos/{owner}/{repo}/teams List a repository's teams #
GET /repos/{owner}/{repo}/teams/{team} Check if a team is assigned to a repository #
PUT /repos/{owner}/{repo}/teams/{team} Add a team to a repository #
DELETE /repos/{owner}/{repo}/teams/{team} Delete a team from a repository #
GET /repos/{owner}/{repo}/times List a repo's tracked times #
GET /repos/{owner}/{repo}/times/{user} List a user's tracked times in a repo #
GET /repos/{owner}/{repo}/topics Get list of topics that a repository has #
PUT /repos/{owner}/{repo}/topics Replace list of topics for a repository #
PUT /repos/{owner}/{repo}/topics/{topic} Add a topic to a repository #
DELETE /repos/{owner}/{repo}/topics/{topic} Delete a topic from a repository #
POST /repos/{owner}/{repo}/transfer Transfer a repo ownership #
POST /repos/{owner}/{repo}/transfer/accept Accept a repo transfer #
POST /repos/{owner}/{repo}/transfer/reject Reject a repo transfer #
POST /repos/{owner}/{repo}/wiki/new Create a wiki page #
GET /repos/{owner}/{repo}/wiki/page/{pageName} Get a wiki page #
DELETE /repos/{owner}/{repo}/wiki/page/{pageName} Delete a wiki page #
PATCH /repos/{owner}/{repo}/wiki/page/{pageName} Edit a wiki page #
GET /repos/{owner}/{repo}/wiki/pages Get all wiki pages #
GET /repos/{owner}/{repo}/wiki/revisions/{pageName} Get revisions of a wiki page #
POST /repos/{template_owner}/{template_repo}/generate Create a repository using a template #
GET /repositories/{id} Get a repository by id #
GET /topics/search Search for topics by keyword #
POST /user/repos Create a repository #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/forgejo-repository-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

forgejo-repository-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: This documentation describes the Forgejo API.
  title: Forgejo activitypub Repository API
  license:
    name: This file is distributed under the MIT license for the purpose of interoperability
    url: http://opensource.org/licenses/MIT
  version: 16.0.0-dev-465-4b83448b7d+gitea-1.22.0
servers:
- url: /api/v1
security:
- BasicAuth: []
- AuthorizationHeaderToken: []
- SudoParam: []
- SudoHeader: []
- TOTPHeader: []
tags:
- name: repository
paths:
  /repos/migrate:
    post:
      tags:
      - repository
      summary: Migrate a remote git repository
      operationId: repoMigrate
      responses:
        '201':
          $ref: '#/components/responses/Repository'
        '403':
          $ref: '#/components/responses/forbidden'
        '409':
          description: The repository with the same name already exists.
        '413':
          $ref: '#/components/responses/quotaExceeded'
        '422':
          $ref: '#/components/responses/validationError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MigrateRepoOptions'
  /repos/search:
    get:
      tags:
      - repository
      summary: Search for repositories
      operationId: repoSearch
      parameters:
      - description: keyword
        name: q
        in: query
        schema:
          type: string
      - description: Limit search to repositories with keyword as topic
        name: topic
        in: query
        schema:
          type: boolean
      - description: include search of keyword within repository description
        name: includeDesc
        in: query
        schema:
          type: boolean
      - description: search only for repos that the user with the given id owns or contributes to
        name: uid
        in: query
        schema:
          type: integer
          format: int64
      - description: repo owner to prioritize in the results
        name: priority_owner_id
        in: query
        schema:
          type: integer
          format: int64
      - description: search only for repos that belong to the given team id
        name: team_id
        in: query
        schema:
          type: integer
          format: int64
      - description: search only for repos that the user with the given id has starred
        name: starredBy
        in: query
        schema:
          type: integer
          format: int64
      - description: include private repositories this user has access to (defaults to true)
        name: private
        in: query
        schema:
          type: boolean
      - description: show only public, private or all repositories (defaults to all)
        name: is_private
        in: query
        schema:
          type: boolean
      - description: include template repositories this user has access to (defaults to true)
        name: template
        in: query
        schema:
          type: boolean
      - description: show only archived, non-archived or all repositories (defaults to all)
        name: archived
        in: query
        schema:
          type: boolean
      - description: type of repository to search for. Supported values are "fork", "source", "mirror" and "collaborative"
        name: mode
        in: query
        schema:
          type: string
      - description: if `uid` is given, search only for repos that the user owns
        name: exclusive
        in: query
        schema:
          type: boolean
      - description: sort repos by attribute. Supported values are "alpha", "created", "updated", "size", "git_size", "lfs_size", "stars", "forks" and "id". Default is "alpha"
        name: sort
        in: query
        schema:
          type: string
          enum:
          - alpha
          - created
          - updated
          - size
          - git_size
          - lfs_size
          - id
          - stars
          - forks
      - description: sort order, either "asc" (ascending) or "desc" (descending). Default is "asc", ignored if "sort" is not specified.
        name: order
        in: query
        schema:
          type: string
          enum:
          - asc
          - desc
      - description: page number of results to return (1-based)
        name: page
        in: query
        schema:
          type: integer
      - description: page size of results
        name: limit
        in: query
        schema:
          type: integer
      responses:
        '200':
          $ref: '#/components/responses/SearchResults'
        '422':
          $ref: '#/components/responses/validationError'
  /repos/{owner}/{repo}:
    get:
      tags:
      - repository
      summary: Get a repository
      operationId: repoGet
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/Repository'
        '404':
          $ref: '#/components/responses/notFound'
    delete:
      tags:
      - repository
      summary: Delete a repository
      operationId: repoDelete
      parameters:
      - description: owner of the repo to delete
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo to delete
        name: repo
        in: path
        required: true
        schema:
          type: string
      responses:
        '204':
          $ref: '#/components/responses/empty'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
    patch:
      tags:
      - repository
      summary: Edit a repository's properties. Only fields that are set will be changed.
      operationId: repoEdit
      parameters:
      - description: owner of the repo to edit
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo to edit
        name: repo
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/Repository'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
        '422':
          $ref: '#/components/responses/validationError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditRepoOption'
          text/plain:
            schema:
              $ref: '#/components/schemas/EditRepoOption'
        description: Properties of a repo that you can edit
  /repos/{owner}/{repo}/actions/artifacts:
    get:
      tags:
      - repository
      summary: List a repository's artifacts
      operationId: ListActionArtifacts
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: filter by artifact name
        name: name
        in: query
        schema:
          type: string
      - description: page number of results to return (1-based)
        name: page
        in: query
        schema:
          type: integer
      - description: page size of results, default maximum page size is 50
        name: limit
        in: query
        schema:
          type: integer
      responses:
        '200':
          $ref: '#/components/responses/ActionArtifactList'
        '400':
          $ref: '#/components/responses/error'
        '403':
          $ref: '#/components/responses/forbidden'
  /repos/{owner}/{repo}/actions/artifacts/{artifact_id}:
    get:
      tags:
      - repository
      summary: Get an artifact by ID
      operationId: GetActionArtifact
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: ID of the artifact
        name: artifact_id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          $ref: '#/components/responses/ActionArtifact'
        '400':
          $ref: '#/components/responses/error'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
    delete:
      description: 'Marks the artifact for deletion. Storage space will be reclaimed

        asynchronously by a background job.

        '
      tags:
      - repository
      summary: Mark an artifact for deletion
      operationId: DeleteActionArtifact
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: ID of the artifact
        name: artifact_id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '204':
          description: artifact marked for deletion
        '400':
          $ref: '#/components/responses/error'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
  /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/zip:
    get:
      tags:
      - repository
      summary: Download an artifact
      operationId: DownloadActionArtifact
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: ID of the artifact
        name: artifact_id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: the artifact archive
        '400':
          $ref: '#/components/responses/error'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
  /repos/{owner}/{repo}/actions/jobs/{job_id}/logs:
    get:
      description: 'Returns the plaintext log for the job. By default the log for the most recent attempt is returned (ActionRunJob.TaskID tracks the latest task). Pass `?attempt=N` to fetch the log for a specific historical attempt; the value matches the `attempt` field returned by the job listing endpoints.

        '
      tags:
      - repository
      summary: Download the plaintext logs of an action job
      operationId: repoGetActionJobLogs
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: ID of the workflow job
        name: job_id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      - description: 1-based attempt number matching the value of `attempt` in the job listing; omit to fetch the latest attempt of the job
        name: attempt
        in: query
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Plaintext log content
          content:
            text/plain:
              schema:
                type: string
        '206':
          description: Partial log content (Range request)
          content:
            text/plain:
              schema:
                type: string
        '401':
          $ref: '#/components/responses/unauthorized'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
  /repos/{owner}/{repo}/actions/runners:
    get:
      tags:
      - repository
      summary: Get runners belonging to the repository
      operationId: getRepoRunners
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: whether to include all visible runners (true) or only those that are directly owned by the repository (false)
        name: visible
        in: query
        schema:
          type: boolean
      - description: page number of results to return (1-based)
        name: page
        in: query
        schema:
          type: integer
      - description: page size of results
        name: limit
        in: query
        schema:
          type: integer
      responses:
        '200':
          $ref: '#/components/responses/ActionRunnerList'
        '400':
          $ref: '#/components/responses/error'
        '404':
          $ref: '#/components/responses/notFound'
    post:
      tags:
      - repository
      summary: Register a new repository-level runner
      operationId: registerRepoRunner
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      responses:
        '201':
          $ref: '#/components/responses/RegisterRunnerResponse'
        '400':
          $ref: '#/components/responses/error'
        '401':
          $ref: '#/components/responses/unauthorized'
        '404':
          $ref: '#/components/responses/notFound'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterRunnerOptions'
  /repos/{owner}/{repo}/actions/runners/jobs:
    get:
      tags:
      - repository
      summary: Search for repository's action jobs according filter conditions
      operationId: repoSearchRunJobs
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: a comma separated list of run job labels to search for
        name: labels
        in: query
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/RunJobList'
        '403':
          $ref: '#/components/responses/forbidden'
  /repos/{owner}/{repo}/actions/runners/registration-token:
    get:
      description: 'This operation has been deprecated in Forgejo 15. Use the web UI or [`/repos/{owner}/{repo}/actions/runners`](#/repository/registerRepoRunner) instead.

        '
      tags:
      - repository
      summary: Get a repository's runner registration token
      operationId: repoGetRunnerRegistrationToken
      deprecated: true
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/RegistrationToken'
  /repos/{owner}/{repo}/actions/runners/{runner_id}:
    get:
      tags:
      - repository
      summary: Get a particular runner that belongs to the repository
      operationId: getRepoRunner
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: ID of the runner
        name: runner_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/ActionRunner'
        '400':
          $ref: '#/components/responses/error'
        '404':
          $ref: '#/components/responses/notFound'
    delete:
      tags:
      - repository
      summary: Delete a particular runner that belongs to a repository
      operationId: deleteRepoRunner
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: ID of the runner
        name: runner_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '204':
          description: runner has been deleted
        '400':
          $ref: '#/components/responses/error'
        '404':
          $ref: '#/components/responses/notFound'
  /repos/{owner}/{repo}/actions/runs:
    get:
      tags:
      - repository
      summary: List a repository's action runs
      operationId: ListActionRuns
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: page number of results to return (1-based)
        name: page
        in: query
        schema:
          type: integer
      - description: page size of results, default maximum page size is 50
        name: limit
        in: query
        schema:
          type: integer
      - description: Returns workflow run triggered by the specified events. For example, `push`, `pull_request` or `workflow_dispatch`.
        name: event
        in: query
        schema:
          type: array
          items:
            type: string
      - description: 'Returns workflow runs with the check run status or conclusion that is specified. For example, a conclusion can be success or a status can be in_progress. Only Forgejo Actions can set a status of waiting, pending, or requested.

          '
        name: status
        in: query
        schema:
          type: array
          items:
            enum:
            - unknown
            - waiting
            - running
            - success
            - failure
            - cancelled
            - skipped
            - blocked
            type: string
      - description: 'Returns the workflow run associated with the run number.

          '
        name: run_number
        in: query
        schema:
          type: integer
          format: int64
      - description: Only returns workflow runs that are associated with the specified head_sha.
        name: head_sha
        in: query
        schema:
          type: string
      - description: Only return workflow runs that involve the given Git reference, for example, `refs/heads/main`.
        name: ref
        in: query
        schema:
          type: string
      - description: Only return workflow runs that involve the given workflow ID.
        name: workflow_id
        in: query
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/ActionRunList'
        '400':
          $ref: '#/components/responses/error'
        '403':
          $ref: '#/components/responses/forbidden'
  /repos/{owner}/{repo}/actions/runs/{run_id}:
    get:
      tags:
      - repository
      summary: Get an action run
      operationId: ActionRun
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: id of the action run
        name: run_id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          $ref: '#/components/responses/ActionRun'
        '400':
          $ref: '#/components/responses/error'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
    delete:
      description: 'Remove a particular workflow run. The workflow run must have completed (succeeded, failed, cancelled) for the operation to succeed. Otherwise, an error is returned.

        '
      tags:
      - repository
      summary: Delete a completed workflow run.
      operationId: DeleteActionRun
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: id of the action run
        name: run_id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '204':
          description: Workflow run has been removed
        '400':
          $ref: '#/components/responses/error'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
  /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts:
    get:
      tags:
      - repository
      summary: List artifacts of a workflow run
      operationId: ListActionRunArtifacts
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: ID of the workflow run
        name: run_id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      - description: filter by artifact name
        name: name
        in: query
        schema:
          type: string
      - description: page number of results to return (1-based)
        name: page
        in: query
        schema:
          type: integer
      - description: page size of results, default maximum page size is 50
        name: limit
        in: query
        schema:
          type: integer
      responses:
        '200':
          $ref: '#/components/responses/ActionArtifactList'
        '400':
          $ref: '#/components/responses/error'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
  /repos/{owner}/{repo}/actions/runs/{run_id}/cancel:
    post:
      description: 'Cancel a particular workflow run. Pending or running jobs of the run are cancelled. A run that has already finished, whether cancelled, failed, skipped or succeeded, is left unchanged. In both cases the endpoint responds with HTTP 204.

        '
      tags:
      - repository
      summary: Cancel a pending or running workflow run.
      operationId: CancelActionRun
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: ID of the workflow run
        name: run_id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '204':
          description: Workflow run has been cancelled
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
  /repos/{owner}/{repo}/actions/runs/{run_id}/jobs:
    get:
      tags:
      - repository
      summary: List jobs of a workflow run
      operationId: ListActionRunJobs
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: ID of the workflow run
        name: run_id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          $ref: '#/components/responses/ActionRunJobList'
        '400':
          $ref: '#/components/responses/error'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
  /repos/{owner}/{repo}/actions/runs/{run_id}/logs:
    get:
      tags:
      - repository
      summary: Download a ZIP of plaintext logs for every job in an action run
      operationId: repoGetActionRunLogs
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: 'ID of the workflow run. The ZIP contains the latest attempt of each job in the run, with each entry named `{job-name}-{job-id}-attempt-{N}.log` (the job ID prevents collisions when two jobs share a name; the attempt number records which run the log came from). The run itself has no attempt number — jobs are re-run independently, so use the per-job logs endpoint with `?attempt` to fetch a specific historical attempt of one job.

          '
        name: run_id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: ZIP archive of per-job log files
          content:
            application/zip:
              schema:
                type: string
                format: binary
        '401':
          $ref: '#/components/responses/unauthorized'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
  /repos/{owner}/{repo}/actions/secrets:
    get:
      tags:
      - repository
      summary: List an repo's actions secrets
      operationId: repoListActionsSecrets
      parameters:
      - description: owner of the repository
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repository
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: page number of results to return (1-based)
        name: page
        in: query
        schema:
          type: integer
      - description: page size of results
        name: limit
        in: query
        schema:
          type: integer
      responses:
        '200':
          $ref: '#/components/responses/SecretList'
        '404':
          $ref: '#/components/responses/notFound'
  /repos/{owner}/{repo}/actions/secrets/{secretname}:
    put:
      tags:
      - repository
      summary: Create or Update a secret value in a repository
      operationId: updateRepoSecret
      parameters:
      - description: owner of the repository
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repository
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: name of the secret
        name: secretname
        in: path
        required: true
        schema:
          type: string
      responses:
        '201':
          description: response when creating a secret
        '204':
          description: response when updating a secret
        '400':
          $ref: '#/components/responses/error'
        '404':
          $ref: '#/components/responses/notFound'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateOrUpdateSecretOption'
    delete:
      tags:
      - repository
      summary: Delete a secret in a repository
      operationId: deleteRepoSecret
      parameters:
      - description: owner of the repository
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repository
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: name of the secret
        name: secretname
        in: path
        required: true
        schema:
          type: string
      responses:
        '204':
          description: delete one secret of the organization
        '400':
          $ref: '#/components/responses/error'
        '404':
          $ref: '#/components/responses/notFound'
  /repos/{owner}/{repo}/actions/tasks:
    get:
      tags:
      - repository
      summary: List a repository's action tasks
      operationId: ListActionTasks
      parameters:
      - description: owner of the repo
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repo
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: page number of results to return (1-based)
        name: page
        in: query
        schema:
          type: integer
      - description: page size of results, default maximum page size is 50
        name: limit
        in: query
        schema:
          type: integer
      - description: "Returns workflow tasks with the check run status or conclusion that is specified.\n For example, a conclusion can be success or a status can be in_progress.\n"
        name: status
        in: query
        schema:
          type: array
          items:
            enum:
            - unknown
            - waiting
            - running
            - success
            - failure
            - cancelled
            - skipped
            - blocked
            type: string
      responses:
        '200':
          $ref: '#/components/responses/TasksList'
        '400':
          $ref: '#/components/responses/error'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
        '409':
          $ref: '#/components/responses/conflict'
        '422':
          $ref: '#/components/responses/validationError'
  /repos/{owner}/{repo}/actions/variables:
    get:
      tags:
      - repository
      summary: Get repo-level variables list
      operationId: getRepoVariablesList
      parameters:
      - description: name of the owner
        name: owner
        in: path
        required: true
        schema:
          type: string
      - description: name of the repository
        name: repo
        in: path
        required: true
        schema:
          type: string
      - description: page number of results to return (1-based)
        name: page
        in: query
        schema:
          type: integer
      - description: page size of results
        name: limit
        in: query
        schema:
          type: integer
      responses:
        '200':
          $ref: '#/components/responses/VariableList'
        '400':
          $ref: '#/components/responses/error'
        '404':
          $ref: '#/components/responses/notFound'
  /repos/{owner}/{repo}/actions/variables/{variablename}:
    get:
      tags:
      - repository
      summary: Get a repo-level variable
      operationId: getRepoVariable
      parameters:
      - description: name of the owner
 

# --- truncated at 32 KB (344 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/forgejo/refs/heads/main/openapi/forgejo-repository-api-openapi.yml