Installation
GitLab Self-Hosted
Connect MergeMe to your own GitLab instance. Choose manual webhooks if MergeMe cannot reach your GitLab, or Application if it can (OAuth, project picker, automatic webhooks - like GitLab.com). Either way, GitLab must be able to POST events to https://api.mergeme.dev. Register webhooks in GitLab either once per group that owns your projects (recommended) or once per project individually.
Prerequisites
- A MergeMe account (sign in at mergeme.dev with Google)
- Maintainer or Owner access on the GitLab groups or projects you want to track
- A Slack workspace where notifications should appear
- Outbound HTTPS from your GitLab instance to
api.mergeme.devon port 443 (see network requirements)
Setup
Create a workspace
Sign in and create a workspace from onboarding. You can pick Self-hosted GitLab as your starting provider (you then choose manual or Application on Sources), or choose GitHub/GitLab.com and enable self-hosted later.
Connect Slack
In the sidebar, open Sources > Slack and click Connect Slack. Authorise the MergeMe bot in your Slack workspace.
Choose manual or Application setup
Open Sources > Self-hosted. Pick Set up manually (paste webhook URL and tokens into GitLab) or Set up via Application (create a GitLab Application, paste instance URL / Application ID / secret, click Test connection, then Connect GitLab). Owners and admins only. You can change method later; that resets self-hosted mappings.
For manual setup, MergeMe shows:
- Webhook URL -
https://api.mergeme.dev/webhooks/gitlab/<workspaceId> - Signing token (recommended, GitLab 19.0+)
- Secret token (fallback for GitLab 18.x and earlier)
Use Regenerate tokens if you need new values - you must update every GitLab webhook that uses them.
Register webhooks in GitLab
Paste the same MergeMe URL and tokens into GitLab. The dashboard setup checklist assumes a group webhook; per-project webhooks work too if you prefer.
- Per group (GitLab Premium or Ultimate, recommended): group > Settings > Webhooks. Events from projects in that group and its subgroups are sent to MergeMe. Map only the project IDs you need in Channel Mappings. See GitLab group webhooks.
- Per project: each project > Settings > Webhooks. Repeat for every project you want to track.
For each webhook you add:
- Paste the Webhook URL into the URL field (must start with
https://) - Paste the Signing token (GitLab 19.0+) or Secret token (older GitLab)
- Enable Merge request events and Comments (on some GitLab versions this appears as Note events). Also enable Pipeline events if you want CI status on Slack cards
- Leave SSL verification enabled
- Click Add webhook
Add channel mappings
Open Routing > Channel mappings. For each self-hosted project, enter the GitLab project ID (under Settings > General in GitLab), pick a Slack channel, and save. Events from unmapped projects are ignored.
Map users (optional)
Open Routing > User mappings. For each GitLab username, select the corresponding Slack user for @-mention resolution.
Network requirements
Your self-hosted GitLab instance cannot be fully air-gapped. When GitLab delivers a webhook, it makes an outbound HTTPS POST to https://api.mergeme.dev/webhooks/gitlab/<workspaceId> on port 443. Manual setup does not require MergeMe to connect inbound. Application setup does - MergeMe must reach your GitLab over HTTPS for OAuth and webhook registration. Allow outbound HTTPS from GitLab to api.mergeme.dev through your firewall or proxy.
Signing token vs secret token
GitLab 19.0 introduced signing tokens - an HMAC-SHA256 signature over the request body, with a timestamp to prevent replays. This is more secure than the older secret token, which sends a plain value in a header with no body integrity check.
| Signing token | Secret token | |
|---|---|---|
| GitLab version | 19.0+ | All versions |
| What's sent | HMAC-SHA256 signature | Plain secret value |
| Body integrity | Yes | No |
| Replay protection | Yes (5 min window) | No |
Use the signing token if your GitLab version is 19.0 or later. Use the secret token as a fallback for older instances. MergeMe checks for the signing token first and falls back to the secret token automatically.
Troubleshooting
Webhook test fails in GitLab - Confirm your GitLab instance can reach https://api.mergeme.dev on port 443. Check firewall, proxy, and SSL verification settings. Some self-hosted instances block outbound HTTPS.
No Slack message after merging an MR - Confirm Merge request events are enabled on the GitLab webhook and the project ID in Channel Mappings matches GitLab exactly.
Comments not appearing in Slack - Confirm Comments (or Note events on older GitLab) is enabled on the webhook.
CI line never appears on Slack cards - Enable Show CI status on Slack cards under Routing > Preferences, and confirm Pipeline events is enabled on the GitLab webhook.