Skip to content

Remove a brand's logo or icon

The brands.images.remove operation: DELETE /api/v1/brands/{id}/images/{variant} in the REST API and the brands_images_remove tool in the MCP server.

DELETE/api/v1/brands/{id}/images/{variant}

Removes a brand's uploaded logo or icon. A typed branding.logoUrl / iconUrl shows again; without one, checkout shows the brand's colour and the portal its name. Removing when there is no uploaded image changes nothing. Needs brands:write.

At a glance

  • REST: DELETE /api/v1/brands/{id}/images/{variant}
  • MCP tool: brands_images_remove
  • Operation ID: brands.images.remove
  • Scope: Organization, or one of its legal entities or brands
  • Permission: brands:write
  • Risk tier: write
  • Dry run: Supported (send Ownrecord-Dry-Run: true)
  • Idempotency: Idempotency-Key optional
  • Modes: Test and live
  • Authentication: API key with the brands:write scope
  • Since: M13

Request

Path parameters

FieldTypeDescription
idbrd_… ID
variantone of logo, iconlogo or icon.

Body

This operation takes no body.

Response

200 OK with a JSON object:

FieldTypeDescription
idbrd_… ID
object"brand"
orgIdorg_… ID
entityIdent_… ID
slugstring
namestring
statusone of draft, test_only, live, suspended
isPlatformBrandboolean
brandingobject
branding.logoUrlstring or null
branding.iconUrlstring or null
branding.logoFileobject or null
branding.iconFileobject or null
branding.primaryColorstring or null
branding.accentColorstring or null
branding.supportEmailstring or null
branding.supportUrlstring or null
branding.termsUrlstring or null
branding.privacyUrlstring or null
statementDescriptorstring
statementDescriptorSuffixstring or null
invoiceSeriesobject
invoiceSeries.invoicestring
invoiceSeries.creditNotestring
billingSettingsobject
billingSettings.dunningobject
billingSettings.dunning.retryOffsetsDaysarray of integer
billingSettings.dunning.finalActionone of unpaid, canceled
billingSettings.entitlementGraceDaysinteger
billingSettings.sendInvoiceobject
billingSettings.sendInvoice.graceDaysinteger
billingSettings.cardExpiryRemindersboolean
billingSettings.pausedEntitlementsboolean
billingSettings.paymentBehaviorone of allow_incomplete, pending_if_incomplete
policiesobject
policies.breakageRecognitionone of at_expiry, manualat_expiry (the default) or manual (held as expired credits until recognised).
policies.supportRefundLimitsarray of objectThe support role's refund limit per currency (M8); a currency not listed has the default of 100 of it.
policies.supportRefundLimits[].amountstringInteger micros as a string.
policies.supportRefundLimits[].currencystring
policies.disputeWalletFreezebooleanFreeze the customer's wallets when a dispute opens (default true; §19.2, M8).
policies.taxIdUnavailableone of charge_as_b2c, blockWhat a sale does when a tax ID couldn't be checked (§9.1 step 1; M13): charge_as_b2c (the default) or block.
portalSettingsobject
portalSettings.allowPlanChangesbooleanCustomers may switch plans along planChangeMatrix (no row: no switch).
portalSettings.planChangeMatrixarray of objectOne row per price: a subscription item on fromPriceId may switch to any of toPriceIds (same mode and currency).
portalSettings.planChangeMatrix[].fromPriceIdprice_… ID
portalSettings.planChangeMatrix[].toPriceIdsarray of price_… ID
portalSettings.allowCancelbooleanCustomers may cancel their subscriptions.
portalSettings.cancelBehaviorone of period_end, immediateA portal cancellation ends the subscription at the period end (default) or at once.
portalSettings.collectCancelReasonbooleanThe portal asks why the customer cancels.
portalSettings.allowQuantityChangesbooleanCustomers may change the quantity (seats) of licensed items.
checkoutSettingsobject
checkoutSettings.localesarray of stringThe brand's languages, its default first. A default, not a restriction: a customer's own language comes first.
checkoutSettings.collectPhoneboolean
checkoutSettings.requireBusinessDetailsone of auto, always, never
createdAtdate-time
updatedAtdate-time

Examples

HTTP
DELETE /api/v1/brands/brd_01m4tx5nj8emwbyf7y9vcf47x4/images/logo
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "id": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "object": "brand",
  "orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
  "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
  "slug": "acme-app",
  "name": "Acme App",
  "status": "test_only",
  "isPlatformBrand": false,
  "branding": {
    "logoUrl": null,
    "iconUrl": null,
    "logoFile": null,
    "iconFile": null,
    "primaryColor": null,
    "accentColor": null,
    "supportEmail": null,
    "supportUrl": null,
    "termsUrl": null,
    "privacyUrl": null
  },
  "statementDescriptor": "ACME APP",
  "statementDescriptorSuffix": null,
  "invoiceSeries": {
    "invoice": "ACM",
    "creditNote": "ACM-CN"
  },
  "billingSettings": {
    "dunning": {
      "retryOffsetsDays": [1, 3, 5, 7],
      "finalAction": "unpaid"
    },
    "entitlementGraceDays": 7,
    "sendInvoice": {
      "graceDays": 14
    },
    "cardExpiryReminders": true,
    "pausedEntitlements": false,
    "paymentBehavior": "allow_incomplete"
  },
  "policies": {
    "breakageRecognition": "at_expiry",
    "supportRefundLimits": [],
    "disputeWalletFreeze": true,
    "taxIdUnavailable": "charge_as_b2c"
  },
  "portalSettings": {
    "allowPlanChanges": true,
    "planChangeMatrix": [],
    "allowCancel": true,
    "cancelBehavior": "period_end",
    "collectCancelReason": true,
    "allowQuantityChanges": false
  },
  "checkoutSettings": {
    "locales": ["en", "hr"],
    "collectPhone": false,
    "requireBusinessDetails": "auto"
  },
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-14T09:30:00.000Z"
}

Errors

CodeHTTP statusWhenWhat to do
resource_not_found404No brand with this ID is visible to the request.Check the ID and that your credentials are scoped to the right organization, entity, brand and mode.
version_conflict409The brand changed at the same time; retry.Fetch the object again and retry the change.
permission_denied403You can't change this brand's settings.Ask an organization owner or admin for a role or scope that allows this action.

It can also return these common errors: validation_failed, api_version_unsupported, invalid_json, unsupported_media_type, authentication_required, api_key_invalid, idempotency_key_reused, idempotency_in_progress, approval_required, approval_rejected, approval_expired, stale_approval, approval_policy_denied, rate_limited, internal_error.