Introduction
Programmatic access to thousands of professionally curated vector logos in SVG format.
What you can do
- Search & browse logos by name, tag, or popularity
- Display logos in your app using the CDN
svg_urlon every logo object - Embed or transform logos using the raw
svg_contentreturned on the single-logo endpoint - Discover related logos via tags
Use cases
| Use case | How |
|---|---|
| Brand directory or comparison site | Search logos by name, display via svg_url |
| Developer tool / design tool | Fetch svg_content to embed, resize, or recolor SVGs |
| AI agent or chatbot | Let your agent look up company logos on the fly |
| Portfolio or showcase | Pull random or popular logos for demo screens |
| Internal dashboard | Show partner/vendor logos next to data |
Working with logos
Every logo object includes an svg_url — a direct CDN link you can use in <img> tags or anywhere you display logos.
When you fetch a single logo (GET /logos/{slug}), the response also includes svg_content with the full SVG markup. Use this to embed inline, modify colors or dimensions, or let your users download the file.
Collection endpoints (/logos, /logos/search, /logos/random, /tags/{slug}/logos) return a lightweight object without svg_content to keep payloads fast.
Rate limits
Every response includes rate-limit headers so you can track your usage:
| Header | Description |
|---|---|
X-RateLimit-Limit |
Your daily quota |
X-RateLimit-Reset |
When the quota resets (ISO 8601, midnight UTC) |
Tiers
| Tier | Daily limit | How to get |
|---|---|---|
| Anonymous | 10 | No key needed |
| Free | 500 | Create a free account + API key |
| Pro | 5,000 | Contact us at info@worldvectorlogo.com |
When you exceed your limit the API returns 429 Too Many Requests with a JSON body:
{
"error": {
"code": "rate_limit_exceeded",
"message": "...",
"resets_at": "2026-03-02T00:00:00+00:00"
}
}
Authenticating requests
To authenticate requests, include an Authorization header with the value "Bearer YOUR_API_KEY".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
The API works without authentication — every endpoint is accessible anonymously with a limit of 10 requests per day (per IP).
For higher limits, create a free account at worldvectorlogo.com and generate an API key under Account → API Keys.
Bearer header (recommended):
Authorization: Bearer YOUR_API_KEY
Query parameter (useful when headers aren't convenient, e.g. <img> tags):
/api/v1/logos?api_key=YOUR_API_KEY
Logo
Browse, search, and retrieve vector logos.
List all logos.
Browse all published logos with optional sorting. Results are paginated with a default of 20 per page.
Example request:
curl --request GET \
--get "https://worldvectorlogo.com/api/v1/logos?page=1&per_page=20&sort=downloads&order=desc" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"page\": 1,
\"per_page\": 22,
\"sort\": \"downloads\",
\"order\": \"asc\"
}"
const url = new URL(
"https://worldvectorlogo.com/api/v1/logos"
);
const params = {
"page": "1",
"per_page": "20",
"sort": "downloads",
"order": "desc",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"page": 1,
"per_page": 22,
"sort": "downloads",
"order": "asc"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://worldvectorlogo.com/api/v1/logos'
payload = {
"page": 1,
"per_page": 22,
"sort": "downloads",
"order": "asc"
}
params = {
'page': '1',
'per_page': '20',
'sort': 'downloads',
'order': 'desc',
}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload, params=params)
response.json()Example response (200, Success):
{
"data": [
{
"slug": "google-2015",
"name": "Google 2015",
"downloads": 48230,
"svg_url": "https://cdn.worldvectorlogo.com/logos/google-2015.svg",
"tags": [
"technology",
"search-engine"
],
"created_at": "2024-01-15T10:30:00+00:00",
"updated_at": "2024-06-20T14:15:00+00:00",
"links": {
"self": "https://worldvectorlogo.com/api/v1/logos/google-2015",
"web": "https://worldvectorlogo.com/logo/google-2015"
}
}
],
"links": {
"first": "https://worldvectorlogo.com/api/v1/logos?page=1",
"last": "https://worldvectorlogo.com/api/v1/logos?page=100",
"prev": null,
"next": "https://worldvectorlogo.com/api/v1/logos?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 100,
"per_page": 20,
"to": 20,
"total": 2000
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
data
object[]
List of logo objects.
slug
string
Unique URL-safe identifier.
name
string
Display name of the logo.
downloads
integer
Total download count.
svg_url
string
Direct CDN link to the SVG file.
tags
string[]
Tag names associated with this logo.
created_at
string
ISO 8601 timestamp.
updated_at
string
ISO 8601 timestamp.
links
object
HATEOAS links (self, web).
meta
object
Pagination metadata.
Search logos by name.
Search across logo names and slugs using a query string. Results are ordered by download count (most popular first).
Example request:
curl --request GET \
--get "https://worldvectorlogo.com/api/v1/logos/search?q=google&page=1&per_page=20" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"q\": \"b\",
\"page\": 22,
\"per_page\": 7
}"
const url = new URL(
"https://worldvectorlogo.com/api/v1/logos/search"
);
const params = {
"q": "google",
"page": "1",
"per_page": "20",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"q": "b",
"page": 22,
"per_page": 7
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://worldvectorlogo.com/api/v1/logos/search'
payload = {
"q": "b",
"page": 22,
"per_page": 7
}
params = {
'q': 'google',
'page': '1',
'per_page': '20',
}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload, params=params)
response.json()Example response (200, Success):
{
"data": [
{
"slug": "google-2015",
"name": "Google 2015",
"downloads": 48230,
"svg_url": "https://cdn.worldvectorlogo.com/logos/google-2015.svg",
"tags": [
"technology",
"search-engine"
],
"created_at": "2024-01-15T10:30:00+00:00",
"updated_at": "2024-06-20T14:15:00+00:00",
"links": {
"self": "https://worldvectorlogo.com/api/v1/logos/google-2015",
"web": "https://worldvectorlogo.com/logo/google-2015"
}
}
],
"links": {
"first": "https://worldvectorlogo.com/api/v1/logos/search?q=google&page=1",
"last": "https://worldvectorlogo.com/api/v1/logos/search?q=google&page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"per_page": 20,
"to": 3,
"total": 3
}
}
Example response (422, Validation error):
{
"error": {
"code": "validation_error",
"message": "The given data was invalid.",
"details": {
"q": [
"The q field is required."
]
}
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get random logos.
Returns a random selection of logos. Useful for showcases or demos.
Example request:
curl --request GET \
--get "https://worldvectorlogo.com/api/v1/logos/random?count=5" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://worldvectorlogo.com/api/v1/logos/random"
);
const params = {
"count": "5",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://worldvectorlogo.com/api/v1/logos/random'
params = {
'count': '5',
}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Success):
{
"data": [
{
"slug": "spotify-2015",
"name": "Spotify 2015",
"downloads": 12500,
"svg_url": "https://cdn.worldvectorlogo.com/logos/spotify-2015.svg",
"tags": [
"music",
"streaming"
],
"created_at": "2024-02-10T08:00:00+00:00",
"updated_at": "2024-05-15T12:00:00+00:00",
"links": {
"self": "https://worldvectorlogo.com/api/v1/logos/spotify-2015",
"web": "https://worldvectorlogo.com/logo/spotify-2015"
}
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single logo by slug.
Returns full details for a specific logo including tags and raw SVG content.
The svg_content field contains the full SVG markup that you can embed,
transform, or offer as a download in your application.
Example request:
curl --request GET \
--get "https://worldvectorlogo.com/api/v1/logos/google-2015" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://worldvectorlogo.com/api/v1/logos/google-2015"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://worldvectorlogo.com/api/v1/logos/google-2015'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Success):
{
"data": {
"slug": "google-2015",
"name": "Google 2015",
"downloads": 48230,
"svg_url": "https://cdn.worldvectorlogo.com/logos/google-2015.svg",
"svg_content": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 272 92\">...</svg>",
"tags": [
"technology",
"search-engine"
],
"created_at": "2024-01-15T10:30:00+00:00",
"updated_at": "2024-06-20T14:15:00+00:00",
"links": {
"self": "https://worldvectorlogo.com/api/v1/logos/google-2015",
"web": "https://worldvectorlogo.com/logo/google-2015"
}
}
}
Example response (404, Not found):
{
"message": "Not Found."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
data
object
slug
string
Unique URL-safe identifier.
name
string
Display name of the logo.
downloads
integer
Total download count.
svg_url
string
Direct CDN link to the SVG file.
svg_content
string
Full SVG markup (only on single-logo endpoint).
tags
string[]
Tag names associated with this logo.
links
object
HATEOAS links (self, web).
Tag
Explore logos organised by tags.
List all tags.
Returns all tags with their logo counts. Sorted alphabetically by name.
Response
Response Fields
data
object
slug
string
Unique URL-safe identifier.
name
string
Display name of the tag.
logos_count
integer
Number of logos with this tag.
links
object
HATEOAS links (self, logos).
Get logos for a specific tag.
Returns all published logos that have the given tag.
Account
Manage your API key and view usage statistics. Requires authentication.
Get API usage statistics.
requires authentication
Returns daily usage breakdown for the current billing period (last 30 days). Includes total requests, remaining quota, and per-endpoint breakdown.
Example request:
curl --request GET \
--get "https://worldvectorlogo.com/api/v1/account/usage" \
--header "Authorization: Bearer YOUR_API_KEY" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://worldvectorlogo.com/api/v1/account/usage"
);
const headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://worldvectorlogo.com/api/v1/account/usage'
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Success):
{
"data": {
"plan": "free",
"today": {
"used": 42,
"limit": 500,
"remaining": 458,
"resets_at": "2026-04-06T23:59:59+00:00"
},
"tokens": 1,
"daily_breakdown": {
"2026-04-06": {
"requests": 42,
"errors": 0,
"avg_response_time_ms": 28
},
"2026-04-05": {
"requests": 150,
"errors": 2,
"avg_response_time_ms": 35
}
}
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
data
object
plan
string
Your current plan tier (free or pro).
today
object
Today's usage summary.
used
integer
Requests made today.
limit
integer
Your daily request quota.
remaining
integer
Requests remaining today.
resets_at
string
ISO 8601 timestamp when the quota resets.
tokens
integer
Number of active API tokens.
daily_breakdown
object
Daily usage data keyed by date.