| Symptom | Start here |
|---|---|
| No webhook deliveries in your Git provider log | Verification step 1: Wrong endpoint URL or event types not configured |
403 Forbidden or 401 Unauthorized in the webhook log | Verification step 1: Webhook secret mismatch or missing |
| Webhook delivers successfully but no review comment appears | Verification step 2: User may not have a paid seat or a linked Git account |
| Qodo reviews some repositories but not others | Verification step 4: Integration does not have access to the repository |
| Reviews were working before but have stopped | Verification step 3: Permissions may have changed |
| Bot-created or draft PRs are skipped | Verification step 5: Default behavior. Can be disabled in configuration |
Verification steps
Single-tenant and multi-tenant: Follow verification steps 1–5. You do not have access to application logs. If you cannot identify the cause, contact Qodo Support with the PR URL and timestamp.On-premises: Follow verification steps 1–5, then see Check your logs for additional diagnostics.
Verification step 1: Confirm the webhook is reaching Qodo
If your Git provider is not sending webhook events, Qodo will not process the PR. Check your webhook delivery logs:- GitHub: Viewing webhook deliveries. Qodo uses a GitHub App. Navigate to your GitHub App settings to find Recent Deliveries.
- GitLab: Webhook logs.
- Bitbucket: Qodo uses a Bitbucket Connect App, which does not provide a native webhook delivery log. If you suspect webhooks are not being sent, contact Qodo Support.
- Azure DevOps: Troubleshoot service hooks.
| Response | Meaning |
|---|---|
200 OK or 202 Accepted | Webhook received. Continue to Verification step 2. |
403 Forbidden | Webhook secret mismatch. |
401 Unauthorized | Webhook secret missing, mismatched, or could not be retrieved (GitLab and Azure DevOps). Authentication failure (other providers). |
| No deliveries listed | Wrong endpoint URL or event types not configured. |
| Event | GitHub | GitLab | Bitbucket | Azure DevOps |
|---|---|---|---|---|
| PR opened or updated | Pull requests | Merge request events | Pull request | Pull request created or updated |
| Comments or commands | Issue comments | Comments | Pull request comment created | Pull request commented on |
| Push to PR branch | Push | Push events | Repository push | Code pushed |
403 (GitHub or Bitbucket) or 401 (GitLab or Azure DevOps), verify that a webhook secret is configured and matches your Qodo deployment:
- GitHub: GitHub App settings → Webhook secret
- GitLab: Webhook settings → Secret token
- Bitbucket Server: Webhook settings → Secret
- Azure DevOps: Service hook subscription settings → Webhook secret
Verification step 2: Confirm the user is licensed
Qodo silently skips reviews when either of the following conditions is not met:- The user must have a paid seat, either as part of a paid team or with an individual license.
- The user must have their Git Cloud account linked in the Qodo portal.
Supported providers and plans: GitHub, Bitbucket, and GitLab Cloud on the Teams plan. Enterprise customers should confirm their Git organization ID has been registered with Qodo.
- Your organization has an active subscription.
- The PR author is a member of the licensed organization with their Git Cloud account linked.
- You are not at or over your monthly review limit. If you are, reviews will be skipped until the next billing cycle.
Verification step 3: Confirm the integration has the required permissions
Qodo requires write access to post comments.GitHub
GitHub
Go to your GitHub App settings → Permissions & events. Confirm:
- Pull requests: Read & Write
- Issues: Read & Write
- Contents: Read
- Checks: Read & Write (if check run annotations are enabled)
GitLab
GitLab
Confirm the access token or PAT used by Qodo has the following scopes:
apiorread_apiwrite_repositorywrite_merge_requests(if available on your GitLab version)
Bitbucket Server
Bitbucket Server
Confirm the bearer token used by Qodo has:
- Read and write access to repositories
- Read and write access to pull requests
Azure DevOps
Azure DevOps
Confirm the PAT used by Qodo has:
- Code: Read & Write
- Pull Request Threads: Read & Write
Verification step 4: Confirm the integration has access to the repository
GitHub
GitHub
Go to your organization’s Settings → GitHub Apps → Qodo → Configure.Under Repository access, confirm the repository is listed, or All repositories is selected. Private repositories require explicit access.
GitLab
GitLab
Confirm the webhook is configured at the correct level: project versus group. If using a group webhook, verify it is set to propagate to subgroups and projects.
Bitbucket
Bitbucket
Webhooks on Bitbucket are configured per repository. Confirm the webhook is set up under the correct repository’s settings, not just at the workspace level.
Azure DevOps
Azure DevOps
Service hook subscriptions are project-scoped. Confirm the subscription is configured for the correct project, and that any event filters do not exclude the repository.
Verification step 5: Additional reasons reviews may be skipped
PR opened by a bot Qodo ignores PRs from bot accounts by default (ignore_bot_pr = true) across all supported providers. Detection works by pattern matching on usernames containing bot-, _bot, or [bot]. To disable, set ignore_bot_pr = false in your Qodo configuration.
Draft pull requests
Qodo skips draft PRs on GitHub and GitLab by default. Set feedback_on_draft_pr = true in the relevant config section ([github_app] for GitHub, [gitlab] for GitLab), or mark the PR as ready for review.
GitHub only: API rate limit
GitHub enforces hourly API rate limits. If Qodo has exhausted its rate limit, it will skip processing until the limit resets, typically within an hour. Try opening a new PR or re-triggering a review after an hour.
Check your logs
On-premises deployments only. Single-tenant and multi-tenant customers should contact Qodo Support.
api_url field on every event:
Additional log fields
| Field | Example value | Use |
|---|---|---|
api_url | Varies by provider (see table below) | Isolate a specific PR. |
git_org | your-org | All events for an organization. |
repo | your-repo | All events for a repository. |
sender | octocat | Events triggered by a specific user. |
request_id | abc123 | Trace a single webhook event end-to-end. |
api_url format by provider
| Provider | Format |
|---|---|
| GitHub Cloud | https://api.github.com/repos/<org>/<repo>/pulls/<PR#> |
| GitHub Server | https://<server>/api/v3/repos/<org>/<repo>/pulls/<PR#> |
| GitLab Cloud | https://gitlab.com/<org>/<repo>/-/merge_requests/<MR#> |
| GitLab Server | https://<server>/<org>/<group>/-/merge_requests/<MR#> |
| Bitbucket Cloud | https://bitbucket.org/<workspace>/<repo>/pull-requests/<PR#> |
| Bitbucket Server | https://<server>/projects/<project>/repos/<repo>/pull-requests/<PR#> |
| Azure DevOps | https://dev.azure.com/<org>/<project>/_git/<repo>/pullrequest/<PR#> |
Log patterns
Once you have the relevant log lines, look for the following:Not licensed or not eligible
Webhook secret or signature failure
Integration not installed on the repository
Permission failure
Rate limit (GitHub)
Output suppressed by configuration
CONFIG.PUBLISH_OUTPUT = true in your Qodo configuration.
Queue workers not running
Still not working?
Contact Qodo Support with the following:- The PR URL.
- The date and time the PR was opened.
- Your Git provider: GitHub, GitLab, Bitbucket, or Azure DevOps.
- Your deployment type: single-tenant, multi-tenant, or on-premises.
- Any relevant log lines if self-hosted.