API Endpoints
Logo Lookup
Fetch company logos by domain name
Endpoint
GET /{domain}?token={your_key}Provide a domain to receive a 302 redirect to the stored logo asset. Browsers and most HTTP clients follow the redirect automatically. Optional transforms (size, greyscale, theme) are applied at the edge.
Parameter Reference
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Company domain (e.g., apple.com) |
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
token | string | required | Your publishable API key (pk_*) |
size | number | 128 | Pixel width (1-800); aspect ratio preserved |
greyscale | boolean | false | Set to true/1/yes for B&W |
theme | string | — | light or dark for background variants |
If no options are provided, the worker serves a 128px-wide version via Cloudflare Image Resizing.
Response
Success (302 Found)
302Found
HTTP/1.1 302 Found
Location: https://cdn.quikturn.io/cdn-cgi/image/width=128/https://cdn.quikturn.io/logos/apple.com.png
Cache-Control: public, max-age=86400
X-RateLimit-Remaining: 499999
X-RateLimit-Reset: 1706745600
Error Responses
400Bad Request
Error Message
Invalid domain formatSolution
Ensure the domain is valid (e.g., 'apple.com') without protocol or path
401Unauthorized
Error Message
Missing or invalid tokenSolution
Include a valid publishable key starting with 'pk_' as the token parameter
404Not Found
Error Message
Logo not foundSolution
Check domain spelling or try the parent domain (e.g., 'google.com' instead of 'mail.google.com')
429Too Many Requests
Error Message
Rate limit exceededSolution
Wait for the Retry-After duration or upgrade your plan for higher limits
The response includes Retry-After and X-RateLimit-Reset headers.
Request Examples
# Inspect headers without downloading
curl -I "https://logos.getquikturn.io/apple.com?token=pk_your_key"
# Follow redirect and save the logo
curl -L "https://logos.getquikturn.io/apple.com?token=pk_your_key" -o apple-logo.png
# With size and greyscale options
curl -L "https://logos.getquikturn.io/apple.com?token=pk_your_key&size=256&greyscale=true" -o apple-gray.pngconst LOGO_API_KEY = 'pk_your_key';
const LOGO_BASE_URL = 'https://logos.getquikturn.io';
async function fetchLogo(domain, opts = {}) {
const params = new URLSearchParams({ token: LOGO_API_KEY, ...opts });
const url = `${LOGO_BASE_URL}/${domain}?${params.toString()}`;
const response = await fetch(url); // follows the 302 automatically
if (!response.ok) throw new Error(`Failed: ${response.status}`);
return await response.blob();
}
// Usage
const logo = await fetchLogo('apple.com', { size: 256, greyscale: true });
const logoUrl = URL.createObjectURL(logo);
document.getElementById('logo-img').src = logoUrl;import requests
import os
LOGO_API_KEY = os.getenv('LOGO_API_KEY')
LOGO_BASE_URL = 'https://logos.getquikturn.io'
def fetch_logo(domain: str, size: int = 128, greyscale: bool = False) -> bytes:
params = {'token': LOGO_API_KEY, 'size': size}
if greyscale:
params['greyscale'] = 'true'
url = f'{LOGO_BASE_URL}/{domain}'
response = requests.get(url, params=params) # follows the 302
response.raise_for_status()
return response.content
# Usage
logo = fetch_logo('apple.com', size=256)
with open('apple-logo.png', 'wb') as f:
f.write(logo)<!-- Basic usage -->
<img
src="https://logos.getquikturn.io/apple.com?token=pk_your_key"
alt="Apple"
loading="lazy"
/>
<!-- With size option -->
<img
src="https://logos.getquikturn.io/google.com?token=pk_your_key&size=256"
alt="Google"
loading="lazy"
/>
<!-- Greyscale variant -->
<img
src="https://logos.getquikturn.io/microsoft.com?token=pk_your_key&greyscale=true"
alt="Microsoft"
loading="lazy"
/>Best Practices
- Let browsers follow redirects —
<img>tags and most HTTP clients handle 302 automatically. - Handle 404s gracefully — Set a fallback image when a logo is missing.
- Respect rate limits — Back off on
429using theRetry-Afterheader. - Use lazy loading — Add
loading="lazy"for below-the-fold images. - Cache appropriately — Logos are cached for 24 hours; respect
Cache-Control.