---
title: "Upsert Source Logo"
method: PUT
path: "/api/v1/admin/source-tracker/logos/{domain}"
tags: ["source-tracker-admin"]
---

# Upsert Source Logo

`PUT /api/v1/admin/source-tracker/logos/{domain}`

Upload or replace the logo rendered for a source ``domain``.

One logo per domain, reused everywhere that domain leads on the map. SVG is
sanitized server-side before it touches S3; raster is stored as-is. The map
reads these via the public logos lookup and layers them over the static
committed manifest, so a new upload takes precedence without touching any
immutable published snapshot.

## Path parameters

- `domain` string, required

## Response `200`

Successful Response

- TrackerSourceLogoRead — A persisted, admin-managed logo for a source domain (uploaded to S3).
  - `id` string, uuid, required
  - `domain` string, required
  - `url` string, required
  - `content_type` string, required
  - `updated_at` string, date-time, required
  - `updated_by` string, uuid, nullable

## Other responses

- `400` — Invalid upload (type, size, or malformed SVG)
- `422` — Validation Error

---

[API](https://skmtc.dev/getanana/apis/cleon-api.md) · [All operations](https://skmtc.dev/getanana/apis/cleon-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/getanana/cleon-api/revisions/c0f54348e251/schema)
