API Documentation
Everything you need to integrate company logos into your application.
Introduction
The CompanyLogo.xyz API provides programmatic access to high-quality 200x200 PNG logos for 47,700+ publicly listed companies across 71 global stock exchanges. All responses are returned in JSON format.
Base URL
https://companylogo.xyz/api/v1Authentication
The recommended approach is to pass your API key as a ?token= query parameter. This is client-safe and works directly in <img> tags without any backend.
<img src="https://companylogo.xyz/api/v1/img/US/AAPL.png?token=your_api_key_here" />For the JSON metadata endpoint, you can also authenticate with the x-api-key header:
curl -H "x-api-key: your_api_key_here" \
https://companylogo.xyz/api/v1/logo/US/AAPLDJ30 (Dow Jones 30) tickers are publicly accessible and do not require an API key. For all other tickers, you must include a valid key. You can generate an API key from your dashboard.
Rate Limits
Rate limits are applied per API key (or per IP for unauthenticated requests). Exceeding the limit returns a 429 response.
| Tier | Rate Limit | Access |
|---|---|---|
| Public (no key) | 10 requests/min | DJ30 tickers only |
| Free | 100 requests/min | DJ30 + 30 unique tickers |
| Paid (PNG) | 1,000 requests/min | All 47,700+ tickers + bulk downloads |
Endpoints
/api/v1/img/:exchange/:ticker.png?token=KEYDirect image endpoint. Returns the PNG image bytes directly — use in <img> tags, CSS, or anywhere you need a logo URL. No backend required. DJ30 tickers work without a token.
Parameters
:exchangepathExchange code (e.g. US, LSE, XETRA):ticker.pngpathTicker symbol with .png extension (e.g. AAPL.png)tokenqueryYour API key. Safe to use client-side. Optional for DJ30 tickers.Response
<!-- Direct image response — use in an <img> tag -->
<img src="https://companylogo.xyz/api/v1/img/US/AAPL.png?token=YOUR_KEY" alt="Apple" />
<!-- Or in React -->
<img src={`https://companylogo.xyz/api/v1/img/${exchange}/${ticker}.png?token=${key}`} />
<!-- DJ30 logos — no token needed -->
<img src="https://companylogo.xyz/api/v1/img/US/AAPL.png" alt="Apple" />/api/v1/logo/:exchange/:tickerRetrieve a logo for a specific ticker on a given exchange. Returns a signed URL and metadata as JSON.
Parameters
:exchangepathExchange code (e.g. US, LSE, XETRA):tickerpathTicker symbol (e.g. AAPL, MSFT)Response
{
"ticker": "AAPL",
"exchange": "US",
"companyName": "Apple Inc",
"logoUrl": "https://cdn.companylogo.xyz/US/AAPL.png?...",
"format": "png",
"width": 200,
"height": 200
}/api/v1/logo/:exchange/:ticker?download=trueDownload the logo file directly. Returns the image binary with appropriate content headers.
Parameters
downloadquerySet to "true" to download the image file directlyResponse
Binary PNG image
Content-Type: image/png
Content-Disposition: attachment; filename="AAPL.png"/api/v1/searchSearch for tickers by company name, ticker symbol, exchange, or sector.
Parameters
qquerySearch query (company name or ticker)exchangequeryFilter by exchange codesectorqueryFilter by sectorpagequeryPage number (default: 1)limitqueryResults per page (default: 20, max: 100)Response
{
"results": [
{
"ticker": "AAPL",
"exchange": "US",
"companyName": "Apple Inc",
"sector": "Technology",
"hasLogo": true
}
],
"page": 1,
"limit": 20,
"total": 1
}/api/v1/exchangesList all available exchanges with their logo counts.
Response
{
"exchanges": [
{
"code": "US",
"name": "United States",
"country": "US",
"logoCount": 3500
}
]
}/api/v1/exchange/:codeGet details for a specific exchange, including a paginated list of its tickers.
Parameters
:codepathExchange code (e.g. US, LSE)Response
{
"code": "US",
"name": "United States",
"country": "US",
"logoCount": 3500,
"tickers": [
{
"ticker": "AAPL",
"companyName": "Apple Inc",
"hasLogo": true
}
]
}/api/v1/bulk/:exchangeDownload a ZIP archive of all logos for a given exchange. Paid tier only.
Requires a paid subscription. Returns 403 for free-tier users.
Parameters
:exchangepathExchange code (e.g. US, LSE)Response
{
"downloadUrl": "https://cdn.companylogo.xyz/bulk/US.zip?...",
"logoCount": 3500,
"sizeBytes": 12450000
}/api/v1/usageGet API usage statistics for the authenticated user.
Response
{
"plan": "PNG_200",
"requestsToday": 142,
"requestsThisMonth": 3850,
"uniqueLogosAccessed": 520,
"rateLimit": 1000,
"rateLimitRemaining": 858
}Code Examples
HTML (direct image)
<!-- No backend needed — works in any HTML page -->
<img src="https://companylogo.xyz/api/v1/img/US/AAPL.png?token=your_api_key_here"
alt="AAPL logo" width="200" height="200" />React
function CompanyLogo({ exchange, ticker }: { exchange: string; ticker: string }) {
return (
<img
src={`https://companylogo.xyz/api/v1/img/${exchange}/${ticker}.png?token=your_api_key_here`}
alt={`${ticker} logo`}
width={200}
height={200}
/>
);
}cURL
curl -o AAPL.png "https://companylogo.xyz/api/v1/img/US/AAPL.png?token=your_api_key_here"curl -H "x-api-key: your_api_key_here" \
https://companylogo.xyz/api/v1/logo/US/AAPLcurl -H "x-api-key: your_api_key_here" \
"https://companylogo.xyz/api/v1/search?q=apple&exchange=US"JavaScript (fetch)
// Direct image — use in an <img> tag, no fetch needed!
// For metadata, use the JSON endpoint:
const response = await fetch(
"https://companylogo.xyz/api/v1/logo/US/AAPL",
{
headers: {
"x-api-key": "your_api_key_here",
},
}
);
const data = await response.json();
console.log(data.logoUrl);Python (requests)
import requests
# Direct image URL — use in templates: /api/v1/img/US/AAPL.png?token=KEY
# For metadata, use the JSON endpoint:
response = requests.get(
"https://companylogo.xyz/api/v1/logo/US/AAPL",
headers={"x-api-key": "your_api_key_here"},
)
data = response.json()
print(data["logoUrl"])Error Codes
All errors return a JSON body with a message field describing the issue.
| Status | Meaning | Description |
|---|---|---|
401 | Unauthorized | Invalid or missing API key. |
403 | Forbidden | Your plan does not include access to this resource (e.g. bulk downloads on free tier). |
404 | Not Found | The requested ticker, exchange, or resource does not exist. |
429 | Too Many Requests | Rate limit exceeded. Wait and retry, or upgrade your plan for higher limits. |
{
"error": "Unauthorized",
"message": "Invalid or missing API key.",
"statusCode": 401
}Ready to start?
Create a free account to get your API key, or explore DJ30 logos without authentication.