---
title: "Begin GitHub App install flow. Optional ?role=read|write selects the App to install (write for IaC-CI orgs; defaults to read)"
method: GET
path: "/integrations/github/install"
tags: ["Integrations"]
---

# Begin GitHub App install flow. Optional ?role=read|write selects the App to install (write for IaC-CI orgs; defaults to read)

`GET /integrations/github/install`

## Request

- Base URL: `https://api.zop.dev`
- URL: `https://api.zop.dev/integrations/github/install`
- Auth: HTTP bearer

Begin GitHub App install flow. Optional ?role=read|write selects the App to install (write for IaC-CI orgs; defaults to read)

## Response `200`

Successful response.

- GenericResponse: Response payload. Per-endpoint response schemas are not yet published — see the linked documentation for the concrete shape of each.

## Other responses

- `401`: Missing, expired or invalid bearer token.
- `403`: The caller is authenticated but lacks permission.
- `429`: Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.
- `500`: Unexpected server error.

---

[API](https://skmtc.dev/zop/apis/zopnight-platform-api.md) · [All operations](https://skmtc.dev/zop/apis/zopnight-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zop/apis/zopnight-platform-api/revisions/ee28c3af60aa?raw)
