List GitHub installations you can connect
Exchanges the OAuth code from the GitHub redirect for the GitHub App installations your account can access, each with the connectGrant createRunnerPool takes. Installations this organization already has a pool for are flagged alreadyConnected. A state that does not match this organization answers 400 OAUTH_STATE_INVALID.
Required permission
Requires the runner.write permission. See Permissions for the roles and API key permissions that include it.
Command line
The orl CLI wraps this endpoint:
orl runners installation list --code <code>apiKeyAuthorizationBearer <token>OpenRelay API key. Send it as Authorization: Bearer or_… (legacy vl_… keys still work).
orgId*stringapplication/json- body
code*stringThe OAuth code from the authorize redirect.
state?stringThe signed state GitHub echoes back on the redirect. The server verifies it against the organization (anti-CSRF), so it is required whenever the OAuth flow is configured: a missing, expired or mismatched state answers 400 OAUTH_STATE_INVALID; start the connect flow again.
OK
application/json- response
installations*array<>curl -X POST 'https://api.openrelay.inc/v1/orgs/string/runner-pools/installations' \ -H 'Content-Type: application/json' \ -d '{ "code": "string"}'{ "installations": [ { "installationId": 0, "account": "string", "accountType": "string", "alreadyConnected": true, "connectGrant": "string" } ]}Get the GitHub connect URL GET
Returns the URL that starts a GitHub connection: the OAuth authorize URL when OAuth is configured, otherwise the GitHub App install URL. installUrl carries the App install URL (empty when no App is configured), for installing the App on another GitHub organization.
Get a runner pool (with usage) GET
Returns one runner pool with its RAM tier, disk size, subscription state and live usage: the active and queued runners and the RAM they hold.