BillKit/DocsConsole
Tenant

Update portal branding

Set the business name, logo, support email, theme and features of your billing portal.

POST/v1/tenant/portal_branding
Operation update_portal_branding·Scope tenant:write·OpenAPI v1.1.0

Parameters

ParameterDescription
business_namestring | nulloptionalThe name the portal shows. Send null to fall back to your account name. At most 255 characters.
capabilitiesobject | nulloptionalWhich portal and embedded checkout features are on. Replaces the stored flags: a flag left out takes its default, and null restores every default.
logo_urlstring (uri) | nulloptionalAn https URL on the default port, at most 2048 characters, of the logo shown in the portal and on invoice PDFs. Send null to clear it. Must be an absolute URL. At most 2083 characters.
support_emailstring (email) | nulloptionalThe contact address the portal shows. Send null to clear it. Must be a valid email address.
themeobject | nulloptionalThe portal's colours and styling. Replaces the stored theme; null clears it.

Returns

Returns a TenantPortalBrandingResponse object.

Errors

StatusCause
400The request was refused (type: invalid_request_error): a required parameter is missing (parameter_missing), one failed validation (parameter_invalid) or is not one the operation takes (parameter_unknown), and param names it.
401No credential, or one that does not authenticate.
402The account is suspended (tenant_suspended), or the payment provider refused a charge or refund the call made (type: payment_error, code: payment_refused).
403Authenticated, but not allowed: missing scope (insufficient_scope), a key of the wrong mode (mode_mismatch), or a refused origin. Needs the tenant:write scope.
404No such object in this account and mode.
409Conflicts with the object's current state (state_conflict, or a more specific code), or an operation still in flight (operation_pending).
413The request body is larger than the API accepts.
429Rate limited. Retry-After says when to try again.
500Something failed on BillKit's side (type: api_error). Retry with the same Idempotency-Key.
502The payment provider failed or did not answer.
503Temporarily unable to serve. reason says whether the request was attempted.
Request · curl
curl -X POST https://api.billkit.eu/v1/tenant/portal_branding \
  -H "Authorization: Bearer $BILLKIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Request body · every field
{
  "business_name": "Ada Lovelace",
  "capabilities": {
    "checkout_header": false,
    "coupons": false,
    "customer_country_editable": false,
    "customer_vat_number_editable": false,
    "cycle_enabled": false,
    "invoice_pdf": false,
    "powered_by": false,
    "show_features": false
  },
  "logo_url": "https://acme.example/welcome",
  "support_email": "ada@example.com",
  "theme": {
    "display": "string",
    "font": "string",
    "on_primary": "string",
    "palette": "studio",
    "primary": "string",
    "primary_100": "string",
    "primary_50": "string",
    "primary_600": "string",
    "radius": 0,
    "stub_a": "string",
    "stub_b": "string"
  }
}
Response · 200 OK
{
  "business_name": "Ada Lovelace",
  "capabilities": {
    "checkout_header": false,
    "coupons": false,
    "customer_country_editable": false,
    "customer_vat_number_editable": false,
    "cycle_enabled": false,
    "invoice_pdf": false,
    "powered_by": false,
    "show_features": false
  },
  "effective_business_name": "",
  "effective_support_email": "",
  "logo_url": "https://acme.example/welcome",
  "object": "tenant_portal_branding",
  "support_email": "ada@example.com",
  "theme": {
    "display": "string",
    "font": "string",
    "on_primary": "string",
    "palette": "studio",
    "primary": "string",
    "primary_100": "string",
    "primary_50": "string",
    "primary_600": "string",
    "radius": 0,
    "stub_a": "string",
    "stub_b": "string"
  }
}