Conversation
Registration correspondence for a brand or campaign went to whichever admin of the Space happened to be oldest. Both resources now take a list of addresses that receives it instead, readable and writable through the API. The brand's existing contact_email is unchanged and still describes the brand's own company, which is what reaches TCR. References signalwire/cloud-product#20360
Contributor
glanotte
marked this pull request as ready for review
September 11, 2026 18:06
PUT /api/relay/rest/registry/beta/brands/{id} has been routed in
prime-rails (resources :brands, only: [:index, :show, :create, :update])
but the spec never declared it, so UpdateBrandRequest was an orphaned
model and the new signalwire_contact_emails field on it rendered nowhere.
Declares the operation, and widens UpdateBrandRequest to the fields the
Rails Update contract actually accepts. Documents the post-unverified
lock: only signalwire_contact_emails stays editable; anything else is
rejected with invalid_state.
The contract accepts name, status_callback_url and signalwire_contact_emails; the spec was missing status_callback_url. Adds it, carries the 3..64 length bound on name, and notes that omitting signalwire_contact_emails keeps the list while an empty list clears it, matching the brand update body.
4 tasks
Manny-r31
approved these changes
Sep 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
References signalwire/cloud-product#20360 and signalwire/prime-rails#10090
What changed
signalwire_contact_emailsis added to the campaign registry's brand and campaign resources: an optional list of email addresses that receives SignalWire's registration correspondence about that brand or campaign. It appears on both response objects, on brand create for managed and CSP brands, on campaign create for managed and partner campaigns, and on both update bodies.Registration currently mails whichever admin of the Space happens to be the oldest, which is why the field exists. Left unset, a campaign falls back to its brand's addresses and then to the user who submitted the registration.
The brand's existing
contact_emailis untouched. That one describes the brand's own company and is what reaches TCR; the new field never does.How it was verified
yarn build:specsregeneratedfern/apis/signalwire-rest/openapi.yaml, committed alongside the TypeSpec source.yarn format:specsleft all six files unchanged.yarn fern-checkpasses the API definition; locally it also prints the unauthenticated "Missing redirects check skipped" error, which needsFERN_TOKENand runs on CI.Risk and rollback
Additive: one optional property on four request bodies and two response objects. No endpoint, path, required field or existing description changes. Reverting the commit removes it.
Notes for review
CreateCspBrandRequestandCreatePartnerCampaignRequestget the field as well. Those resources are registered directly with TCR by the customer, but SignalWire still raises the registration ticket, so the contact still applies.