GitHub and GitLab connection issues
Fix token scopes and lost repository access, and learn which fields deliberately do not sync so gaps are not mistaken for bugs.
Last updated
On this page
Symptoms
- Connecting fails, or an existing connection's health turns Degraded or Needs attention.
- The "Continue with GitHub" or "Continue with GitLab" button isn't there — only a token form.
- Some field changes made in Laya never show up in GitHub or GitLab.
- Pull requests or merge requests are missing from the mirrored board.
- A self-managed GitLab instance URL is rejected.
- The board stops picking up provider-side changes.
Likely causes
- The personal access token is missing scopes, was revoked, or its account lost access to the repository or group.
- OAuth isn't configured on the server — the connect screen then says "OAuth isn't configured on this server yet — connect with a personal access token below.", and the token form is the normal path.
- The field you changed is one that deliberately doesn't sync outbound in the current version (see the table below).
- Pull requests and merge requests are never mirrored — Laya mirrors issues and project boards.
- The GitLab instance URL isn't a publicly reachable https address.
- Background polling isn't running, so provider-side changes wait for Sync now.
Fix it
Check the token's scopes and reconnect
- Create a fresh token with the scopes aboveA token that connects fine but later fails on specific boards usually lacks a scope (for example Projects access for a GitHub Projects v2 board).
- ReconnectFor GitLab, prefer Continue with GitLab where the button is shown — the OAuth path also has you pick the namespace on a "Choose a namespace" screen. Otherwise, run the connect flow again and paste the token into the personal access token form. If a token you know is valid keeps being rejected, email support@laya.net with the exact error.
Lost access to a repository or group
Mirrors can only reach what the connected account can reach. If that account is removed from a repository, organisation or group on the provider side, syncs start failing — the connection degrades and failed rows appear in the Sync log. Restore the account's access in GitHub or GitLab, or reconnect with a token from an account that has access, then press Sync now.
Fields that deliberately don't sync
For cards imported to a master board, only a subset of fields flows between Laya and each provider in the current version. A change outside these lists staying local is expected behaviour, not a fault:
| Direction | GitHub | GitLab |
|---|---|---|
| Laya → provider | Title, status, description | Title, status, due date, weight (story points), description |
| Provider → Laya | Title, status, description | Title, status, priority (derived from labels), weight, description |
- Priority, assignee and issue type never push outbound to GitHub or GitLab.
- Attachments are not synced or imported for either provider.
- Moving a card to a Done column closes the underlying issue; moving it out of Done reopens it.
- Rich text is converted from Markdown with some loss — tables, code fences and inline marks are flattened to plain text.
Items that never appear
- GitHub pull requests are filtered out of mirrors — repository mirrors carry Issues, and Projects v2 boards are mirrored as their own board model.
- GitLab merge requests are not mirrored — GitLab mirrors carry issues.
Self-managed GitLab instance rejected
The "Instance URL (optional — self-hosted)" field defaults to gitlab.com. A self-managed instance must be a publicly reachable https URL — internal, loopback and private-network addresses are rejected with "That GitLab instance URL is not allowed…". If your instance is only reachable inside a private network, Laya cannot connect to it.
Provider-side changes aren't arriving
- Press Sync nowThe dependable refresh path — it re-reads the provider and updates the open board live.
- Check the Polling toggleIn the connection's Settings tab. When polling isn't running, changes wait for a manual sync or an edit made through Laya.
- Check the Sync logFailed rows expand to the provider's error message.
Verify the fix
- The connection's health card shows Healthy with a fresh "Synced X ago".
- A test change in GitHub or GitLab appears in Laya after a Sync now.
- A synced field edited in Laya (for example the title) appears on the provider side.
If you're still stuck
Email support@laya.net with: which provider (GitHub or GitLab, and the instance URL if self-managed), the repository, project or group involved, the scopes the token was created with (never include the token itself), and one failed Sync log row with its expanded error.
Email support@laya.net — include what you expected, what happened, and a link to the affected board or item so we can help quickly.