Documentation Integrations

Integrations

Push every bug into the tracker your team already works in, and let a fix there settle the report here — so the person who reported it is told, without anyone closing the same thing twice.

Scope: per project Role needed: Admin Setup time: about 2 minutes each

How pushing works

Connect an integration to a project and every bug filed into that project is pushed automatically, as it arrives. There is no rule to write and no button to press.

Connect more than one and the bug goes to all of them — a Jira issue and a Slack message from the same report is the common setup, and it is what you get by connecting both.

ProviderWhat arrivesFix there closes the bug here
JiraAn issue in your projectYes — with a webhook
GitHubAn issue in a repositoryYes — with a webhook
LinearAn issue in a teamNot yet — see the note below
SlackA message in a channelNo — a message has nothing to close

The pushed issue carries the title, the description, the severity, the page URL, and the console and network lines that matter — the failing requests and the error output, not the whole buffer.

Pushing sends bug content outside our encryption boundary. On plans with encryption at rest, a report is stored sealed — but a tracker cannot read ciphertext, so the issue body is decrypted on the way out. That is what connecting an integration asks for, and it is worth knowing before you connect one to a project handling sensitive reports.

Connecting a tracker

All four start the same way, in the dashboard: open the project, then Settings → Integrations → Trackers & Data Sources, and pick a provider. You need the Admin role.

Credentials marked secret are write-only — once saved they come back as •••••••• and there is no screen that will show them to you again. To change one, type a new one over the mask; leaving the mask in place means "leave it alone".

Jira

FieldExampleWhere to get it
Jira base URL https://acme.atlassian.net Your Jira address, without a path.
Project key ENG The short prefix on every issue in the target project.
Account email you@acme.com The Atlassian account the issues will be created by.
API token secret ATATT3x… id.atlassian.com → Security → API tokens → Create API token. Not your password.

Use a service account, not your own. Every issue will carry the identity of whichever account this token belongs to, and that account leaving the company takes the integration with it.

GitHub

FieldExampleWhere to get it
Repository acme/storefront Owner and name, exactly as in the URL. Not the full address.
Personal access token secret github_pat_… Settings → Developer settings → Personal access tokens. A fine-grained token scoped to that one repository with Issues: Read and write is enough.

Issues must be enabled on the repository. If they are turned off, the push fails with a 410 and the bug stays where it is.

Linear

FieldExampleWhere to get it
Team ID a1b2c3d4-… Linear → Settings → your team → the id in the URL, or from the API.
API key secret lin_api_… Linear → Settings → API → Personal API keys.

Severity is mapped onto Linear's priority scale: critical → Urgent, high → High, medium → Medium, low → Low.

Linear's inbound webhook does not settle bugs yet. Pushing works — issues are created and linked. But completing the issue in Linear does not currently close the report here, because the two ends identify the issue differently. Close the bug in BugCatch as well, or use Jira or GitHub if two-way sync matters to you.

Slack

FieldExampleWhere to get it
Incoming webhook URL secret https://hooks.slack.com/services/T…/B…/… api.slack.com/apps → your app → Incoming Webhooks → Add New Webhook to Workspace, and pick the channel.

The URL is the channel — it is bound to whichever one you picked when you created it. To post somewhere else, make a second webhook.

Check it worked

  • Save the integration. The page confirms it by name.
  • File a test bug into that project — the widget, the extension or a curl all do.
  • Within a few seconds the issue or message appears at the other end.
  • The bug's timeline in BugCatch shows a pushed to … entry with the issue reference.

If nothing arrives, the timeline is where the reason is: a rejected credential or a missing repository is recorded there rather than silently dropped.

Sending status back — the tracker webhook

Traffic only goes one way until you do this. The engineer who actually fixes the bug closes a ticket in Jira, because that is where they already are, and BugCatch never learns: the bug stays open, the knowledge base never learns the fix, and the customer who reported it is never told.

One webhook fixes all of it. An issue reaching a terminal state settles the bug here, and everything downstream runs on its own — the resolution is stamped, the knowledge base is taught, the reporter's email goes out, and duplicates of it are cascaded.

  1. Get the URL

    In Settings → Integrations → Trackers & Data Sources, open the connected integration and choose Webhook. You get a full address to paste, and a secret.

    For GitHub and Linear the URL is plain and the secret goes in the tracker's own signing field. For Jira — which signs nothing — the secret is carried in the URL itself, so treat that whole address as a credential.

  2. Register it in the tracker

    See the per-provider steps below.

  3. Test it

    Close the test issue you created earlier. Within a few seconds the bug in BugCatch should move to resolved, and its timeline should say the tracker closed it.

GitHub

Repository → Settings → Webhooks → Add webhook.

Payload URLThe URL from the dashboard
Content typeapplication/json
SecretThe secret from the dashboard
EventsLet me select individual events → Issues only

The body is verified against X-Hub-Signature-256, so an unsigned or mis-signed delivery is refused.

Linear

Settings → API → Webhooks → New webhook. Subscribe to Issues, and paste the secret into Linear's signing secret field — deliveries are verified against Linear-Signature. As noted above, the delivery is authenticated but will not currently match a bug.

Jira

Jira Settings → System → Webhooks → Create a WebHook. Paste the whole URL, including its ?token=…, and subscribe to Issue → updated. Scope it with a JQL filter of project = ENG so you are not sending every issue in the instance.

Jira webhooks are unsigned, which is why the secret is in the URL. Anyone who obtains that address can post to it, so do not put it in a ticket, a wiki page or a shared document. If it leaks, rotate it from the same screen you got it from — the old address stops working immediately.

What is acted on, and what is deliberately ignored

Only a terminal transition and an explicit reopen. Everything else is dropped on purpose: Jira fires an update webhook when somebody edits a label, and a mapping that read "not done" as "open" would reopen a fixed bug every time a colleague tidied a field.

ProviderCloses the bug whenReopens it when
GitHubThe issue is closedThe issue is reopened
JiraStatus category becomes DoneIt leaves Done
LinearState type becomes completed or canceledIt leaves those

Status categories and state types rather than names, because every team renames "Done" to "Shipped" and adds three of its own — the category is the field that survives that. A cancelled Linear issue counts as finished: it is not coming back, and leaving the bug open forever waiting for it is the worse of the two wrong answers.

A delivery that arrives intact always gets a 200, even when there was nothing to do with it. Trackers disable an endpoint that keeps answering with errors, and "we have no bug for that issue" is not an error — it is every issue your team files by hand.

Slack has no webhook of its own, because a message has nothing to close. Connect Jira, GitHub or Linear to have a fix settle the bug.

Which of these do you actually need?

If your team…Connect
Plans work in Jira and closes tickets thereJira + its webhook. The two-way loop is the point.
Lives in GitHub issuesGitHub + its webhook.
Wants to see bugs arrive but triages in BugCatchSlack alone.
Needs to collect from people outside the companyA recording link. No tracker involved.
Wants something none of these doThe REST API — read a report, do what you like with it.

Still stuck?

Every answer here describes what the product actually does today. If something behaves differently, that is worth telling us about — it means the page is wrong.

Support
support@sphoro.com
Security
info@sphoro.com
Talk to us
Book 20 minutes