---
title: "Fetch Logo"
method: POST
path: "/media/fetch-logo"
tags: ["media"]
---

# Fetch Logo

`POST /media/fetch-logo`

## Request

- Base URL: `https://api.moda.app/v1`
- URL: `https://api.moda.app/v1/media/fetch-logo`
- Auth: HTTP bearer

Fetch a brand's logo files by DOMAIN and store them in the team library (free lookup).

Free and unmetered, like the in-app agent tool over the same runner (founder
ruling 2026-08-25) — the only cost control is the shared media rate limit.

Up to three variants per domain (typically the wordmark, the icon, and a
light/dark pairing), each saved as a durable `file_` the canvas and the
other media verbs accept. SVG is preferred when the brand publishes one.

Domains are looked up independently: one that has no brand data reports its
own typed `error` (`domain_not_found`, `low_quality_rejected`,
`provider_quota_exceeded`, `download_failed`) while the rest of the batch
still returns logos.

A domain is unambiguous by construction, but a WRONG domain is not an error:
it returns that other company's real logo. The resolved `domain` and
`brand_name` are echoed on every result so the caller can check.

## Headers

- `Moda-Version` '2026-04-12' | '2026-05-01'

## Request body

- FetchLogoRequest
  - `domains` string[], required: Brand domains to look up, e.g. ['nike.com', 'apple.com']. This is a DOMAIN lookup, not a fuzzy company-name search: a wrong domain (a typo, the wrong TLD, a holding company) returns that other company's real logo rather than an error, so check the brand_name echoed back before using the result. At most 10 per call — more is refused rather than trimmed to the cap, so a batch always covers every domain it accepted.
  - `idempotency_key` string, nullable: A retried call with the same key replays the stored response (replayed:true) instead of re-running the lookup and storing duplicate copies of the same logo files.

## Response `200`

Successful Response

- object

## Other responses

- `401`: Authentication required.
- `402`: Insufficient credits for a metered operation.
- `403`: Permission denied for this scope.
- `404`: Resource not found.
- `409`: Conflict (idempotency / resource state).
- `422`: Request validation failed.
- `429`: Rate limit exceeded.
- `500`: Internal error.

## Changes

- **2026-11-03** `9ac6a3abc0f8`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/moda/apis/moda-public-api/changes/media/fetch-logo/post.md)

---

[API](https://skmtc.dev/moda/apis/moda-public-api.md) - [All operations](https://skmtc.dev/moda/apis/moda-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/moda/apis/moda-public-api/revisions/9ac6a3abc0f8?raw)
