AccountCustomer portal

Update the customer portal

PATCH
/v1/account/portal

How your customer portal and storefront look, and what your customers may do there. Send only what changes; null clears a field, putting it back on its default - your account name for brandName, your billing email for supportEmail, on for enabled, off for selfSignup, read-only for allow. Live and sandbox keep their own, so you can brand your sandbox and look at it first.

Authorization

apiKey
headerAuthorizationBearer <token>

An API key from the Developers page. rhq_test_ keys reach the sandbox, rhq_live_ keys the live side.

Request Body

application/json
  1. body
enabled?|

Turning this off answers the same 404 as an address no reseller holds

brandName?|null
logoUrl?|

Must be https

logoDarkUrl?|

The logo on a dark background. Must be https; null, logoUrl on both

accentColor?|null
supportEmail?|null
emailFromName?|

The from-name on mail to your customers

termsUrl?|

Must be https

privacyUrl?|

Must be https

selfSignup?|

Whether a storefront visitor may open an account unasked

allow?array<>|

The full new list, replacing any you had. Empty leaves customers read-only

products?array<>|

The full new list, replacing any you had. Only lines your own account can order: ticking one here never grants one you do not hold

Response Body

How your customer portal and storefront look, and what your customers may do there

application/json
  1. response

How your customer portal and storefront look, and what your customers may do there

enabled*boolean

Whether the portal and storefront answer at all. On until turned off

brandName*|

Shown to customers instead of your account name. Null, your account name

logoUrl*|

https only

logoDarkUrl*|

The logo on a dark background, https only. Null, logoUrl on both

accentColor*|

#rrggbb, rendered as a CSS custom property

supportEmail*|

Where customers are told to write. Null, your billing email

emailFromName*|

The from-name on mail to your customers. Null, your brand name

termsUrl*string|null
privacyUrl*string|null
selfSignup*boolean

Whether a storefront visitor may open an account unasked. Off until turned on

allow*array<>

What your customers may do in the portal. Empty means read-only

products*array<>

The product lines your customers may browse. Empty means none

theme*string

auto forces nothing and follows the visitor’s own device, which is what happens with no field at all. light/dark force the portal, next split issue - this field is persisted and shown in the builder’s own preview now

Value in"light""dark""auto"
fontPair*string

geist is today’s faces, unchanged. Default geist

Value in"geist""classic""mono"
headline*|

The storefront home page’s own heading. Null, the builder’s computed default

intro*|

One or two sentences under the headline. Null, the builder’s computed default

banner*|

A short announcement above the products. Null means none, same as today

productOrder*array<>

The order your product lines are drawn in, filtered to whichever are in products. Default is domains, numbers, licences, filtered the same way - today’s order

termsMode*string

Whether Terms is a link to your own page or a page written here. Default link

Value in"link""write"
termsText*|

Your own words, shown when termsMode is write. Null until you write some

privacyMode*string

Whether Privacy is a link to your own page or a page written here. Default link

Value in"link""write"
privacyText*|

Your own words, shown when privacyMode is write. Null until you write some

faq*array<>

Questions and answers at the foot of the storefront home page. Empty means none

pricesBeforeSignIn*boolean

Whether a visitor sees prices before signing in. Default true, today’s real behaviour with no field at all. Not yet wired into the real pricing gate

requireEmailVerification*boolean

Whether a customer must confirm their email before they can sign in. Default true, today’s real behaviour with no field at all. Not yet wired into the real sign-in gate

url*string

Where this side of the account answers to customers. Read-only, and computed from your slug: live and sandbox have their own

publishedAt*|

When the builder’s draft was last published to this live document. Null means never, through the builder - set only by POST /account/portal/publish

Formatdate-time
curl -X PATCH "https://example.com/v1/account/portal" \  -H "Content-Type: application/json" \  -d '{}'
{  "enabled": true,  "brandName": "Northwind",  "logoUrl": "https://northwind.example/logo.svg",  "logoDarkUrl": "https://northwind.example/logo-white.svg",  "accentColor": "#1d4ed8",  "supportEmail": "[email protected]",  "emailFromName": "Northwind Support",  "termsUrl": "https://northwind.example/terms",  "privacyUrl": "https://northwind.example/privacy",  "selfSignup": true,  "allow": [    "domains.nameservers"  ],  "products": [    "domains"  ],  "theme": "light",  "fontPair": "geist",  "headline": "Find your domain",  "intro": "Search a name across every ending we sell.",  "banner": "string",  "productOrder": [    "domains"  ],  "termsMode": "link",  "termsText": "string",  "privacyMode": "link",  "privacyText": "string",  "faq": [    {      "question": "string",      "answer": "string"    }  ],  "pricesBeforeSignIn": true,  "requireEmailVerification": true,  "url": "https://northwind.portal.example",  "publishedAt": null}