Workbenches is an open standard. Read why
Docs GitHub and repositories

API reference

GitHub and repositories

An organization connects GitHub App installations so its members can run on their repositories and discover Workbench packages in them. How runs use GitHub is on Repositories and pull requests.

Connecting an installation is an interactive browser flow done from the dashboard's sources page. Its routes are session only:

Method Path Auth Purpose
POST /v1/authorizations Session: manager Start a GitHub authorization. Body { "organization_id", "installation_id"?, "return_to"?: "sources" or "onboarding" }. Returns { "authorization_url", "install_url" }.
PATCH /v1/authorizations/:id Session: the authorization's owner Continue with a newly installed installation_id. Same response.
POST /v1/installations/candidates Session: the authorization's owner List what GitHub's OAuth code reaches. Links nothing.
POST /v1/installations Session: the authorization's owner Link exactly the chosen installations. Body { "state", "selection", "installation_ids" }.
GET /v1/installations?organization_id=<uuid> Session: member Connected installations and, for managers, reusable ones.
POST /v1/installations/discoveries Session: manager List the installations the user can reach from their saved GitHub authorization, without a new GitHub prompt. Body { "organization_id", "return_to" }. Returns { "status": "connected", "state", "listing" }, or { "status": "disconnected" } or { "status": "expired" }.
DELETE /v1/installations/:id Session: manager Unlink an installation. Returns { "deleted": true }.

Each candidate has a status: linkable (no organization links it), linked (this one already does), reusable (another organization you belong to links it), or unavailable, with a reason. Being able to see an installation is not enough to link it: on a personal account it must be yours, and on a GitHub organization you must be an active admin. A selection token is valid for 10 minutes, and linking ends the authorization.

The installation object has id, organization_id, installation_id, account_id, account_login, account_type (Organization or User), settings_url, created_at, and updated_at.

Repositories#

Repositories synced from the organization's installations.

The repository object#

Field Meaning
id, organization_id, github_installation_id UUIDs.
github_id GitHub's repository ID.
owner, name, url
default_branch
visibility public or private.
status active, unavailable, or removed.
last_commit, last_synced_at Or null.
created_at, updated_at

List repositories#

GET /v1/repositories?organization_id=<uuid>

Key catalog:read, or session: member. Response 200 { "repositories": [ ... ] }.

Refresh repositories#

POST /v1/syncs with { "organization_id": "uuid" }

Key packages:write, or session: member. Reads repositories from every installation again. Response 201 { "repositories": [ ... ] }.

Discover packages#

POST /v1/discoveries with { "repository_id": "uuid" }

Key packages:write, or session: member. Finds .workbenches/* packages in a repository at its current commit, through GitHub's API. Nothing is cloned.

Response 201:

{
    "repository_id": "uuid",
    "source_commit": "4f2c...",
    "workbenches": [
        {
            "source_path": ".workbenches/core/workbench.yml",
            "slug": "core",
            "valid": true,
            "errors": [],
            "manifest": {
                "spec": 1,
                "version": "0.1.0",
                "name": "core",
                "...": "..."
            }
        }
    ]
}

Submit discovered packages for review with the GitHub form of POST /v1/submissions; see Workbenches and registry.