---
title: "Company logo redirect (Wikidata + DuckDuckGo fallback)"
method: GET
path: "/api/v2/quotes/{symbol}/logo.png"
tags: ["Finance"]
---

# Company logo redirect (Wikidata + DuckDuckGo fallback)

`GET /api/v2/quotes/{symbol}/logo.png`

Returns a 302 redirect to the best logo image URL for the given ticker. Resolution order: Wikidata P154 (company logo) -> Wikidata P18 (image) -> DuckDuckGo Icons favicon (via Wikidata P856 official website). Returns 404 when none of the three tiers has data, 502/504 when the SPARQL upstream fails. Designed for direct browser embed via `<img src='.../logo.png'>`. For raw metadata in JSON, use the companion `/{symbol}/logo` endpoint. Sprint 9C.x: optional `?width=<n>` query param (16-2048) scales the image server-side via the Wikimedia Commons CDN. Has no effect on the DuckDuckGo Icons fallback (favicon-sized images only).

## Path parameters

- `symbol` string, required — Security ticker symbol.

## Query parameters

- `width` integer, nullable — Optional pixel width for server-side scaling via Wikimedia Commons CDN. 16-2048 px. Ignored for the DuckDuckGo Icons fallback tier.

## Other responses

- `302` — Redirect to image URL
- `400` — Invalid symbol format
- `401` — Missing or invalid `x-api-key` header. JSON body with a stable `code` distinguishing `missing_api_key` (no header sent) from `invalid_api_key` (header sent, key not accepted); any other 401 source carries the generic `unauthorized` with its detail as `reason`. Plus `hint`. `plan` is always null on 401 - an unauthenticated request has no plan; quota exhaustion is 429, not 401.
- `404` — No logo available across all fallback tiers
- `422` — width param out of range (must be 16-2048)
- `429` — Daily rate limit exceeded. Check `X-RateLimit-Reset` for the next window.
- `500` — This API answered a shape its own schema refuses. Typed body `error: response_shape_invalid`. Stays a 500 (WEB-28). Not an upstream failure.
- `502` — The upstream answered with an error or a malformed body (typed `detail` object) or the feed's maintenance page (string `detail`).
- `503` — Upstream unreachable (typed `detail` object with source and retry hint) or the legacy blanket unavailability (string `detail`).
- `504` — The upstream source did not answer within the client deadline.

## Changes

> 35 revisions in range; 1 not diffed.

- **2026-09-13** `d2472ec2cf81` — 3 breaking, 5 warning, 3 info
  - added `#/components/schemas/UpstreamErrorResponse, subschema #2` to the response body `oneOf` list for the response status `503`
  - the response's body type changed from `object` to no type for status `503`
  - removed the required property `error` from the response with the `503` status
  - removed the optional property `code` from the response with the `503` status
  - …7 more
- **2026-08-22** `914af3d38c7c` — 1 breaking
  - removed the success response with the status `200`
- **2026-08-08** `4c4530760ba1` — 12 info
  - added the optional property `code` to the response with the `401` status
  - added the optional property `code` to the response with the `429` status
  - added the optional property `code` to the response with the `503` status
  - added the optional property `hint` to the response with the `401` status
  - …8 more

[Change history](https://skmtc.dev/sugra/apis/sugra-api/changes/api/v2/quotes/:symbol/logo.png/get.md)

---

[API](https://skmtc.dev/sugra/apis/sugra-api.md) · [All operations](https://skmtc.dev/sugra/apis/sugra-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sugra/apis/sugra-api/revisions/4e86b76b435b?raw)
