GhanaLogos

Vector logo library

API documentation

The GhanaLogos API is a JSON REST API. All endpoints use GET, live under https://www.ghanalogos.com/api/v1 and support CORS. Get a key from the developer dashboard.

Authentication

Send your key in the Authorization header as a bearer token. The X-API-Key header and an api_key query parameter are also accepted — use the query parameter only where headers are impossible, such as image tags, because URLs end up in logs.

Header
Authorization: Bearer gl_live_your_key

Every key is registered to one website when you create it — for example example.com, which also covers www.example.com and any other subdomain. Requests from a browser send an Origin or Referer header, and they are rejected with 403 origin_not_allowed unless it matches that website (or localhost, if you enabled it for development). Use a separate key for each website.

Requests from your own server don't send those headers and always work, so keep keys secret. Call the API from your server where possible; if a key leaks, revoke it from the dashboard and create a new one.

Rate limits

Every request — including errors after authentication — counts toward a per-minute limit and a monthly quota that resets on the 1st of each month (UTC).

PlanPer minutePer monthKeys
Sandbox301,0001
Individual12025,0003
Team300150,00010
Organisation1,0001,000,00050

Each response includes these headers:

ParameterTypeDescription
X-PlanstringYour current plan.
X-RateLimit-LimitintegerMonthly request quota.
X-RateLimit-RemainingintegerRequests left this month.
X-RateLimit-Resetunix timeWhen the monthly quota resets.
Retry-AftersecondsSent with 429 responses.

Errors

Errors use standard HTTP status codes and a consistent body:

Error response
{
  "error": {
    "code": "invalid_api_key",
    "message": "This API key is invalid or has been revoked."
  }
}
400invalid_parameterA query parameter has an invalid value.
401missing_api_keyNo API key was sent.
401invalid_api_keyThe key is wrong or has been revoked.
403origin_not_allowedBrowser request from a website the key isn't registered to.
404not_foundNo logo exists with that slug.
429rate_limitedPer-minute limit exceeded. Wait for Retry-After seconds.
429quota_exceededMonthly quota used up. Resets on the 1st (UTC) or upgrade.
503unavailableThe API is temporarily unavailable.

List logos

GET/api/v1/logos

Returns logos, featured first by default.

ParameterTypeDescription
qstringSearch by company name (fuzzy).
categorystringCategory slug, e.g. banks-finance. See List categories.
sortstringfeatured (default) or name. Ignored when q is set.
pageintegerPage number, starting at 1.
per_pageintegerResults per page, 1–100. Default 50.
Response
{
  "data": [
    {
      "name": "MTN Ghana",
      "slug": "mtn-ghana",
      "categories": [
        "telecom"
      ],
      "format": "svg",
      "width": 512,
      "height": 256,
      "brand_color": null,
      "website": "https://www.mtn.com",
      "description": "MTN Group Limited (formerly M-Cell) is a South African multi…",
      "featured": true,
      "files": {
        "original": "https://cdn.sanity.io/files/df9atjo0/production/390a7324620129493103a3f594700bb3a05b9fa5.svg",
        "download": "https://www.ghanalogos.com/api/v1/logos/mtn-ghana/download"
      },
      "page_url": "https://www.ghanalogos.com/logo/mtn-ghana",
      "source": {
        "url": "https://commons.wikimedia.org/wiki/File:MTN_2022_logo.svg",
        "license": "Public domain",
        "wikipedia": "https://en.wikipedia.org/wiki/MTN_Group"
      }
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 50,
    "total": 1,
    "total_pages": 1
  }
}

GET/api/v1/logos/{slug}

Returns a single logo object in data, or 404 not_found.

Download a file

GET/api/v1/logos/{slug}/download

Returns the original file (SVG where available, otherwise PNG or JPG) with the correct Content-Type. Add ?disposition=inline to display it rather than download it.

List categories

GET/api/v1/categories

Response
{
  "data": [
    {
      "slug": "banks-finance",
      "title": "Banks & Finance",
      "description": "…",
      "logo_count": 18,
      "page_url": "https://www.ghanalogos.com/category/banks-finance"
    }
  ]
}

Check usage

GET/api/v1/usage

Response
{
  "data": {
    "plan": "team",
    "month": "2026-10",
    "requests_used": 1234,
    "requests_limit": 150000,
    "per_minute_limit": 300,
    "resets_at": "2026-11-01T00:00:00.000Z",
    "plan_expires_at": "2026-11-12T09:30:00.000Z"
  }
}

Code examples

cURL
curl "https://www.ghanalogos.com/api/v1/logos?category=banks-finance&per_page=10" \
  -H "Authorization: Bearer $GHANALOGOS_API_KEY"
JavaScript (Node 18+)
const res = await fetch("https://www.ghanalogos.com/api/v1/logos?q=ecobank", {
  headers: { Authorization: `Bearer ${process.env.GHANALOGOS_API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error.message);
const { data } = await res.json();
console.log(data[0].files.original);
Python
import os, requests

res = requests.get(
    "https://www.ghanalogos.com/api/v1/logos/mtn-ghana",
    headers={"Authorization": f"Bearer {os.environ['GHANALOGOS_API_KEY']}"},
)
res.raise_for_status()
logo = res.json()["data"]
print(logo["name"], logo["brand_color"])
PHP
$ch = curl_init("https://www.ghanalogos.com/api/v1/categories");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer " . getenv("GHANALOGOS_API_KEY")]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$categories = json_decode(curl_exec($ch), true)["data"];

Licence & attribution

Logos are trademarks of their owners and are provided for identification. Sandbox keys are for personal and non-commercial use; paid plans include commercial use. You may not resell the dataset or use the API to build a competing logo library. See the full usage & trademark terms.