Create your own logo
The public endpoint returns a transparent PNG or lossless WebP. PNG is the default. No account, API key or editor is needed. Logo-only images are square. Add a wordmark for a single-line logo and text image with automatic height. Original proportions are always preserved.
- Start with
https://lhtpics.com/api/logoand choose one flag:?solid,?outline,?shadedor?two-tone. - Add
&color1=e8c047, replacing the value with your six-digit hex color. Leave out the#. - Optionally add
&color2=d99a28. This creates a left-to-right gradient, except on Two-tone where it colors the second element. - Add
&size=2048for a 2048 × 2048px image. Open the URL and save the PNG, or use the URL as an image source.
https://lhtpics.com/api/logo?outline&color1=ffffff&color2=cccccc&size=2048
Open this 2048px example (opens in a new tab)
Four logo variants
A clean, single-color LHT logo.
Open solid example (opens in a new tab)An outlined logo with a left-to-right gradient.
Open outline example (opens in a new tab)The shaded variant keeps its depth while applying your colors.
Open shaded example (opens in a new tab)Primary yellow on the first element and golden orange on the second.
Open two-tone example (opens in a new tab)Parameters and defaults
solid | outline | shaded | two-tone- Choose one bare flag, such as
?outline, not?variant=outline. Defaults to Solid. color1- Six hex digits without #, case-insensitive. Defaults to LHT yellow,
e8c047. color2- Optional second six-digit hex color. Omit it for a single color. Solid, Outline and Shaded fade from color1 on the left to color2 on the right. Two-tone applies the two colors to separate elements. Shaded and Two-tone retain their original shading.
size- An integer from 64 to 2048 without a wordmark, or 64 to 4096 with an LHT or LuckyHash wordmark. Defaults to 2048 for both. Sets the width in pixels. Height matches the width for a logo alone, or is calculated automatically when a wordmark is included. The artwork is raster-based; SVG output is not available.
Add an LHT or LuckyHash wordmark
Add &wordmark=LHT or &wordmark=LuckyHash to place bold text to the right of the logo on one line. These values are case-insensitive; the rendered text always uses LHT or LuckyHash. With a wordmark, size sets the width of the complete image, including both logo and text; its height is calculated automatically.
Set &wordmarkColor=e8c047 for a LuckyHash yellow wordmark, or use any six-digit hex color without #. The wordmark uses a solid color only and defaults to color1. Logo colors and gradients are set separately using color1 and color2.
https://lhtpics.com/api/logo?solid&color1=e8c047&wordmark=LuckyHash&wordmarkColor=e8c047&size=2048
Open the LuckyHash wordmark example (opens in a new tab) · Open the LHT wordmark example (opens in a new tab)
For a larger wordmark image, use &size=4096. Open a 4096px-wide example (opens in a new tab).
Choose PNG or WebP
Add &format=webp for lossless WebP, or &format=png for PNG. Both preserve transparency and work with every logo style and wordmark. Format values are case-insensitive. If omitted, the API returns PNG.
The response content type and randomly suffixed filename match your chosen format. Each format is cached separately and uses the same rate limits.
Open a WebP example (opens in a new tab)
Use it on a website or in a script
Use a normal HTML image with meaningful alternative text. In HTML attributes, write query separators as &.
<img src="https://lhtpics.com/api/logo?solid&color1=e8c047&size=512" width="256" height="256" alt="LHT logo">
Download from a terminal by quoting the URL so the shell does not interpret its ampersands:
curl --fail 'https://lhtpics.com/api/logo?two-tone&color1=e8c047&color2=d99a28&size=2048' -o lht-logo.png
Responses and caching
GET returns image/png or image/webp, depending on format. HEAD returns headers without generating an image body. Cross-origin access is allowed without credentials.
200: success.304: unchanged, when you send a matchingIf-None-MatchETag.400: invalid or unknown parameters, with a JSON error message.405: unsupported HTTP method.429: request or rendering limit reached; wait for the number of seconds inRetry-After.503: image generation is temporarily unavailable, with a JSON error message.
Images have a public cache lifetime of one day and support ETag revalidation. Reuse downloaded images where possible rather than fetching the same logo repeatedly.
Rate limits and fair use
The API enforces 10 requests per rolling minute per IP address across all logo options. This includes cached images, invalid parameters, HEAD and conditional requests that reach our server. The JSON help endpoint is excluded. Additional Cloudflare burst limits may apply.
Download a logo once and reuse it on your website or in your app. Cache images by their complete URL, including colors, size and wordmark options. If you generate a batch, send requests sequentially and spread them out rather than requesting every image at the same time.
To protect the service for everyone, uncached generation is also limited to 100 renders per rolling minute globally, with two renders at a time. Identical images are cached on the server for up to one day, subject to cache capacity, and cache hits do not use rendering capacity. If you receive HTTP 429 Too Many Requests, pause and follow the Retry-After header when provided. Otherwise, wait at least a minute before retrying. Do not repeatedly retry failed requests without a delay.
For developers and AI agents
All documentation on this page is included in the server-rendered HTML and can be read without JavaScript, cookies or signing in. Read the machine-readable JSON reference at /api/logo/help for parameters, defaults, response codes and complete example URLs.
Use only the documented flags and parameters. Download successful responses in the selected PNG or WebP format and check HTTP status codes before using the response as an image.
Want to create a complete design around your logo? Open the editor or browse templates. Use of the artwork remains subject to our terms of use.