heruAPI
Branding

Update a merchant's brand

BuildingIn development for the v1 API. The contract is set; the route is not served yet.

PUT
/branding/merchants/{id}

Sets the merchant's own brand fields. A field left out keeps its value; null clears it, and the merchant inherits its company's again. The same body twice leaves the brand as it is, so a retry is safe and needs no Idempotency-Key. Changes reach the invoicing page and the emails within a minute.

The logo goes through PUT /branding/merchants/{id}/logo.

Needs the branding:write scope.

Authorization

oauth2 branding:write
headerAuthorizationBearer <token>

OAuth 2.0 client credentials. Exchange your client_id and client_secret at /oauth/token of the environment for a bearer token valid for one hour. The playground of every operation asks for your own client and keeps it in your browser tab only.

Scope: branding:write

Path parameters

id*string

The merchant id.

Match^mer_[0-7][0-9a-hjkmnp-tv-z]{25}$

Request body

application/json
  1. body

Only the fields sent change. null clears a field; an empty string is not a valid value.

display_name?|

Plain text, without control characters or < > { }. Spaces are collapsed.

Length1 <= length <= 80
primary_color?|

#RRGGBB; stored upper-cased.

Match^#[0-9a-fA-F]{6}$
support_email?|

One plain address, stored lower-cased.

Formatemail
Lengthlength <= 254
footer_text?|

Plain text, without control characters or < > { }.

Lengthlength <= 500

Response body

The brand was saved. The answer is the effective brand, as GET returns it.

application/json
  1. response
merchant_id*string
Match^mer_[0-7][0-9a-hjkmnp-tv-z]{25}$
display_name*|

Name on the invoicing page and in the emails. Null: the merchant's trade name, or its legal name.

logo*|

Null: heru's logo.

primary_color*|

Accent colour. Null: heru's. Text on it is white or dark, whichever reads, so any colour is safe.

Match^#[0-9A-F]{6}$
support_email*|

Help line of the page and the emails. Null: heru's support mailbox.

Formatemail
footer_text*|

Footer of the page and the emails. Null: none.

sources*

Which level decided each field: the merchant itself, its company, its organization, or heru's default.

curl -X PUT 'https://api.dev.b2b.heru.app/v1/branding/merchants/mer_01m4xnvf23ecb963n48h2j9vxz' \  -H 'Content-Type: application/json' \  -d '{  "display_name": "Clínica Dental Roma",  "primary_color": "#0E7C86",  "support_email": "contacto@clinica-dental-roma.example"}'

{  "merchant_id": "mer_01m4xnvf23ecb963n48h2j9vxz",  "display_name": "Clínica Dental Roma",  "logo": {    "url": "https://invoice.heru.app/assets/logo/3f5c0a9d7e2b4c6a8f1e0d3b5a7c9e2f4b6d8a0c1e3f5a7b9d0c2e4f6a8b0c1d.png",    "content_type": "image/png",    "width": 480,    "height": 160  },  "primary_color": "#0E7C86",  "support_email": "contacto@clinica-dental-roma.example",  "footer_text": null,  "sources": {    "display_name": "merchant",    "logo": "merchant",    "primary_color": "merchant",    "support_email": "merchant",    "footer_text": "default"  }}

© 2026 Kuarto Inc. (heru)heru.appQuestions about your integration? Contact your heru account team.