Skip to content

feat(developer-settings): add webhook headers field to custom integrations#116732

Closed
sentry-junior[bot] wants to merge 2 commits into
masterfrom
feat/webhook-headers-ui
Closed

feat(developer-settings): add webhook headers field to custom integrations#116732
sentry-junior[bot] wants to merge 2 commits into
masterfrom
feat/webhook-headers-ui

Conversation

@sentry-junior

@sentry-junior sentry-junior Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a Webhook Headers textarea field in Integration Details, directly below the Webhook URL field, for both internal and public custom integrations.

Each line in the textarea is a header sent alongside every webhook request, e.g.:

anthropic-version: 2023-06-01
anthropic-beta: experimental-cc-routine-2026-04-01
image

Notes

  • Backend support for webhookHeaders (model field, serializer, API) is a follow-up PR per the frontend/backend split policy.
  • No TypeScript checker available in shallow clone; all types are modelled on existing patterns (mirrors allowedOrigins exactly).

Action taken on behalf of Billy


View Session in Sentry

…tions form

Add a multiline textarea under Webhook URL in Integration Details for
specifying custom HTTP headers sent with every webhook request.
Each line takes the format 'Header-Name: value'.

Follows the same pattern as Authorized JavaScript Origins (allowedOrigins)
using convertMultilineFieldValue/extractMultilineFields for display and
serialization.

Note: backend support for webhookHeaders is a follow-up; this PR wires
the frontend field and includes it in the save payload.

Co-authored-by: Billy Vong <billy@sentry.io>
@github-actions github-actions Bot added the Scope: Frontend Automatically applied to PRs that change frontend components label Jun 2, 2026
@sentry-junior

sentry-junior Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor Author

QA — Vercel Preview ✅

Tested on preview deploy at https://sentry-hes00q7wi.sentry.dev (commit bedfb6, branch feat/webhook-headers-ui).

What was checked

Route Result
/settings/developer-settings/new-internal/
/settings/developer-settings/new-public/

Findings

  • Webhook Headers textarea is present on both internal and public integration forms, immediately below the Webhook URL field under Integration Details
  • Textarea autosizes correctly when content is entered
  • Placeholder text renders (anthropic-version: 2023-06-01 / authorization: Bearer token123)
  • Hint text renders: "Custom headers to include with every webhook request. Enter one header per line in the format: Header-Name: value"
  • No layout regressions observed

Screenshots available in the Sentry Slack thread. Ready to unblock once the backend PR lands.

- Move webhookHeaders? to alphabetical position after owner? in SentryApp
  interface, satisfying typescript-sort-keys/interface eslint rule
- Break long placeholder line (93 chars) to fit 90-char printWidth for
  oxfmt format hook

Co-authored-by: Billy Vong <billy@sentry.io>
@billyvg

billyvg commented Jun 8, 2026

Copy link
Copy Markdown
Member

Superseded by the stacked PRs that add the backend plus a rebuilt frontend:

Closing in favor of #117091.

@billyvg billyvg closed this Jun 8, 2026
billyvg added a commit that referenced this pull request Jun 8, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 8, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 8, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 8, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 9, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 10, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 11, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 17, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 17, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 17, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 17, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 17, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 18, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 18, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
billyvg added a commit that referenced this pull request Jun 18, 2026
…tions

Add a Webhook Headers textarea to the Integration Details form for internal
and public custom integrations, directly below Webhook URL. Each line is a
'Header-Name: value' pair sent with every outgoing webhook request.

Mirrors the allowedOrigins field exactly (convert/extract multiline helpers).
Masked values returned by the API round-trip safely because the backend
preserves the stored value for any entry resubmitted with the mask sentinel, so
the form needs no special masking logic.

Supersedes #116732, which split out this UI ahead of the backend.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Scope: Frontend Automatically applied to PRs that change frontend components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant