Connections
GitHub
Camper manages organization teams on GitHub. Connect with a GitHub App installation (recommended) or a personal / fine-grained access token for development.
Connect with a GitHub App (recommended)
- Create a GitHub App (organization) with permissions to manage teams and read members as required for your Camper plan.
- Install the app on the target organization.
- Note the App ID, installation ID, and download a private key (PEM).
- In Camper: Connections → GitHub → Connect.
- Choose GitHub App, enter org login, app id, installation id, and paste the PEM.
- Camper seals credentials with your tenant key and runs a health check (mint installation token + list teams).
Camper mints short-lived installation access tokens on demand (JWT → GitHub) and caches them until near expiry — tokens are never logged.
PAT fallback
Use a PAT or fine-grained token with org team access for local/dev. Prefer Apps in production so rotation and least-privilege installs stay org-scoped.
- Connections → GitHub → Token mode.
- Enter org login + token.
- Health check lists teams with the token.
What you get today
| Capability | Status |
|---|---|
| Connect + health | ✅ |
| Browse / import teams | ✅ |
| Create / rename / delete teams | ✅ |
| Add / remove team members | ✅ |
| Map identity email → GitHub login | ✅ (SAML/SCIM + verified domain emails) |
Team names are free-form; GitHub slugs are derived (lowercase, hyphens) with collision checks on create/rename.
Archive on GitHub means delete the team (there is no soft-archive). Re-create if you need the team again.
Identity resolution
Camper maps each person's work email to a GitHub login using (in order):
- SAML / SCIM external identities (GraphQL) — matches SAML
nameIdor SCIM emails to the linked GitHub user - Organization-verified domain emails on org members (GraphQL)
If neither path finds a user, Camper records drift (skipped membership) instead of failing the batch. Requires the GitHub App (or token) to have permission to read org members / external identities.
Optional connection config: identityMode = auto (default) | saml | verified_domain.
Nested teams (optional)
To nest a managed team under another GitHub team, set the resource’s parent team id (parentTeamId) or enable nesting on the connection (nestTeams) with a default parent. Camper passes GitHub’s parent_team_id on create.
Rate limits
Camper honors GitHub primary and secondary (abuse) rate limits. Secondary limits often arrive as HTTP 403 — Camper treats them as retryable throttles (not permission failures) and backs off using Retry-After or at least 60 seconds.
Disconnect / reconfigure
Use Reconfigure on the connection card to seal new App or token credentials. Linked team resources stay in Camper until you change them under Resources.