Skip to main content
curl -X POST https://checkout.noxpay.io/v2/naas/submerchants/branding \
  -H "api-key: <key>" \
  -H "X-Signature: <signed-body-signature>" \
  -H "Content-Type: application/json" \
  -d '{
    "timestamp": "2026-05-27T14:30:00Z",
    "payload": {
      "correlation_id": "a1b2c3d4-e5f6-4789-abcd-000000000001",
      "trade_name": "AcmePay",
      "colour": "#FF5500"
    }
  }'
import requests

body, sig = sign_envelope({
    "correlation_id": "a1b2c3d4-e5f6-4789-abcd-000000000001",
    "trade_name": "AcmePay",
    "colour": "#FF5500",
})
response = requests.post(
    "https://checkout.noxpay.io/v2/naas/submerchants/branding",
    headers={"api-key": "<key>", "X-Signature": sig, "Content-Type": "application/json"},
    data=body,
)
print(response.json())
const { body, signature } = signEnvelope({
  correlation_id: "a1b2c3d4-e5f6-4789-abcd-000000000001",
  trade_name: "AcmePay",
  colour: "#FF5500",
});
const response = await fetch("https://checkout.noxpay.io/v2/naas/submerchants/branding", {
  method: "POST",
  headers: { "api-key": "<key>", "X-Signature": signature, "Content-Type": "application/json" },
  body,
});
const data = await response.json();
{ "message": "Company branding updated successfully" }
{ "error": "logo exceeds maximum size of 5MB" }
{ "error": "sub-merchant has no portal account" }
Updates the visual identity of a sub-merchant used on their checkout pages: display name, logo, and/or primary button colour. Changes take effect on the next checkout session.
This endpoint operates at the master merchant level. Do not include correlation_id in the envelope — pass it inside payload instead.
Branding can be updated at most once every 30 days per sub-merchant. At least one of trade_name, logo, or colour must be provided.

Payload fields

FieldTypeRequiredDescription
correlation_idstring (UUID)YesUUID returned by Enroll Sub-merchant.
trade_namestringNoDisplay name shown on the checkout page.
logostring (base64)NoBase64-encoded logo image. Standard or raw encoding; data:<mime>;base64, prefix optional. Must be PNG or JPEG, max 5 MB, max 400×400 px.
colourstringNoHex colour code for the primary action button (e.g. #FF5500).

Response 200 OK

{ "message": "Company branding updated successfully" }
400 — missing correlation_id; no fields provided; 30-day cooldown not elapsed; logo is not valid base64, not PNG/JPEG, exceeds 5 MB, or exceeds 400×400 px. 404correlation_id not found or does not belong to this master merchant. 422 — sub-merchant has no portal account yet (KYB not completed).
curl -X POST https://checkout.noxpay.io/v2/naas/submerchants/branding \
  -H "api-key: <key>" \
  -H "X-Signature: <signed-body-signature>" \
  -H "Content-Type: application/json" \
  -d '{
    "timestamp": "2026-05-27T14:30:00Z",
    "payload": {
      "correlation_id": "a1b2c3d4-e5f6-4789-abcd-000000000001",
      "trade_name": "AcmePay",
      "colour": "#FF5500"
    }
  }'
import requests

body, sig = sign_envelope({
    "correlation_id": "a1b2c3d4-e5f6-4789-abcd-000000000001",
    "trade_name": "AcmePay",
    "colour": "#FF5500",
})
response = requests.post(
    "https://checkout.noxpay.io/v2/naas/submerchants/branding",
    headers={"api-key": "<key>", "X-Signature": sig, "Content-Type": "application/json"},
    data=body,
)
print(response.json())
const { body, signature } = signEnvelope({
  correlation_id: "a1b2c3d4-e5f6-4789-abcd-000000000001",
  trade_name: "AcmePay",
  colour: "#FF5500",
});
const response = await fetch("https://checkout.noxpay.io/v2/naas/submerchants/branding", {
  method: "POST",
  headers: { "api-key": "<key>", "X-Signature": signature, "Content-Type": "application/json" },
  body,
});
const data = await response.json();
{ "message": "Company branding updated successfully" }
{ "error": "logo exceeds maximum size of 5MB" }
{ "error": "sub-merchant has no portal account" }