Automotive logos for leasing and finance applications

Applications, quotes, portfolio tables, and PDF documents all identify a vehicle by make. Put the right manufacturer badge next to it with one URL, in the size and format each surface needs, and take the 100-brand logo folder off your team's plate for good.

See what it saves
apply.lender.example/application/APP-240817/vehicle

Lease application

Vehicle · Step 2 of 4

  1. Applicant
  2. Vehicle
  3. Finance
  4. Review
GET https://motomarks.io/img/bmw?type=badgeGET https://motomarks.io/img/bmw?type=badge&format=png&size=sm
The vehicle step of a lease application. The make select, the summary panel, and the PDF badge reference are live CDN requests; the PNG variant is the same slug with format=png. Change the make to update the summary.

What it changes for a finance business

A lease book adds makes, manufacturers refresh their marks, and every one of those events used to land on an engineer or a designer. Four costs that stop recurring, and what each one replaces.
New makes quoted the same day
When an EV brand enters your lease book, it is a slug in the JSON API rather than a request to design. Sales quotes it the day the pricing lands.
Replaces a design ticket for every new make
Fewer wrong-make applications
Applicants confirm the badge before they type a model. A mismatched make caught at step two costs a click; caught at underwriting it costs a re-key and a callback.
Replaces manual correction after submission
Documents that match the car
The mark on the quote PDF is the mark on the vehicle. A document assembled from a stale or off-brand logo costs trust at exactly the moment a customer is deciding whether to sign.
Replaces a hand-maintained PNG set for templates
Rebrands without a template audit
When a manufacturer refreshes its logo, the asset behind the URL changes and every quote, portal card, and email picks it up within a day. Nobody opens forty templates to check.
Replaces a template sweep after every rebrand

How Leaselab took 100 brands off the operations budget

Leaselab runs a leasing business across multiple platforms with more than 100 brands to keep current: the same applications, portals, and documents you are building. This is what their CTO said changed.
Company
Leaselab
Footprint
Multiple platforms
Library
More than 100 automotive brands
Before Motomarks
An extensive operational cost

What the team stopped doing

  1. 01

    Hours chasing updated brand assets

    The asset behind the URL is updated; the URL does not change

  2. 02

    Resizing logos by hand for each placement

    size= and type= are query parameters

  3. 03

    Applying one change across various systems

    Every platform reads the same URL, so one update reaches all of them

Our application flow, customer portal, and document templates all render the same badge from the same URL. A new make used to mean a designer, three pull requests, and a release window. Now it is a slug in a config table, and the badge is on the quote the same afternoon.
AC
Adrian Ciaschetti
CTO, Leaselab

Where the badge follows the vehicle

From the first form field to the signed document. Each row is the literal query string that surface sends.
Application form
A 20px badge inside the make select, so applicants confirm the brand before they type a model.
type=badge&size=xs
Quote and offer summary
The make badge beside the vehicle on the card a customer reviews and signs.
type=badge&size=md
Customer portal
Each agreement under My vehicles carries its badge, so a two-car household tells them apart at a glance.
type=badge&size=sm
Broker and portfolio tables
A 16px wordmark per row instead of a text-only make column in dense tables.
type=wordmark&size=xs&aspect=height
PDF quotes and emails
PNG for PDF renderers and email clients that do not decode WebP.
type=badge&size=sm&format=png

What a 100-brand library costs to keep by hand

Leaselab called it an extensive operational cost. The defaults below describe a library of their shape spread across an application, a customer portal, and document templates. Put in your own numbers and compare the result with a plan.

Leaselab maintains more than 100

Application, customer portal, document templates

Rebrands, new brands, corrections

Source, resize, convert, commit, deploy, check

Find, trim, export sizes and formats, once

Salary, benefits, and overhead per hour

Motomarks plan to compare

Your numbers; change any input. First year = brands × minutes per brand + changes × codebases × hours per change. Each year after drops the one-time build. The model counts engineering time only; it leaves out CDN hosting, storage, and the cost of shipping an out-of-date mark.

Coverage for lease and loan books

The makes that fill lease books and finance portfolios, published as badges today. Each tile links to the brand's logo page with its variants and sizes. See the full index on the browse page.

Integration in four steps

Server-side brand list, client-side badges, PNG for documents, and two keys kept apart. The examples use Next.js; the URLs are the same in any stack.
Two keys, one URL pattern, and the PDF renderer gets PNG from the same slug. That is the whole integration.
AC
Adrian Ciaschetti
CTO, Leaselab
  1. 01

    Load the make list on the server

    The JSON API returns every published brand with its id (the slug) and name. Fetch it with the secret key on your server, revalidate daily, and hand the client a plain list.

    The application form never needs the secret key, and the make list never goes stale between deploys.

    app/api/makes/route.ts
    export async function GET() {
      const res = await fetch("https://api.motomarks.io/brands", {
        headers: { Authorization: `Bearer ${process.env.MOTOMARKS_SECRET_KEY}` },
        next: { revalidate: 86400 },
      });
      if (!res.ok) return Response.json([], { status: 502 });
    
      const brands: { id: string; name: string }[] = await res.json();
      return Response.json(brands.map(({ id, name }) => ({ slug: id, name })));
    }
  2. 02

    Render the badge in the form and the summary

    One helper builds the URL; each surface passes the size it needs. The select uses xs, the summary card md. Same slug, same key, no image assets in the repository.

    vehicle-summary.tsx
    const badge = (slug: string, size: "xs" | "sm" | "md") =>
      `https://motomarks.io/img/${slug}?type=badge&size=${size}&token=${process.env.NEXT_PUBLIC_MOTOMARKS_KEY}`;
    
    export function VehicleSummary({ make, model }: { make: Make; model: string }) {
      return (
        <div className="summary">
          <img src={badge(make.slug, "md")} alt={`${make.name} badge`} width={48} height={48} />
          <div>
            <strong>{make.name}</strong>
            <span>{model}</span>
          </div>
        </div>
      );
    }
  3. 03

    Use PNG in generated documents

    PDF renderers and many email clients do not decode WebP. Request format=png for anything that leaves the browser. Same slug, same size scale, different container.

    A fixed width and height keeps the document layout stable while the image loads.

    templates/quote.html
    <!-- rendered to PDF and attached to the offer email -->
    <img
      src="https://motomarks.io/img/{{ make_slug }}?type=badge&size=sm&format=png&token=pk_YOUR_PUBLISHABLE_KEY"
      alt="{{ make_name }}"
      width="32"
      height="32"
    />
  4. 04

    Keep the two keys apart

    Publishable pk_ keys are designed for client-side image requests. Secret sk_ keys authenticate the JSON API and never leave the server.

    On Pro, restrict the publishable key to your portal hostnames so a key lifted from a quote PDF cannot be reused elsewhere.

    .env
    # server only: JSON API (brand list, metadata, colours)
    MOTOMARKS_SECRET_KEY=sk_live_...
    
    # browser, PDFs, emails: image CDN
    NEXT_PUBLIC_MOTOMARKS_KEY=pk_live_...

Questions before you integrate

Can we place manufacturer logos in PDF quotes and customer emails?

Yes. Request format=png for PDF renderers and email clients that do not decode WebP. The logos remain the property of their manufacturers and use is subject to their trademark policies, so present the badge as vehicle identification rather than as an endorsement of your finance product.

Is a publishable key safe inside a customer-facing portal?

Yes. Publishable pk_ keys exist for browsers and mobile apps and only serve images. Keep the secret sk_ key on the server for JSON API calls. Pro and Enterprise accounts can restrict a publishable key to specific hostnames.

What happens if a customer's vehicle make is not published?

Keep the make name in the markup and let the badge fall back to text or an initial. Check the browse index for current coverage and request missing brands from the submit page.

How do we keep the make list current as brands launch?

Fetch the brand list from the JSON API with a daily revalidation. New brands, logo updates, aliases, and metadata changes appear in the public changelog, and the URL structure does not change when the library grows.

Which plan fits a finance product?

Free covers 1,000 requests a day with an attribution link on your public site. Startup ($19/month, 10,000 requests a day) and Pro ($49/month, 100,000 requests a day) remove attribution; Pro adds per-key domain restrictions and self-hosting permission.

How do we justify the plan cost internally?

Startup is $228 a year billed monthly. At a loaded engineering cost of $85 an hour that is under three hours of work. Applying one manufacturer rebrand by hand across an application, a customer portal, and a document template set usually takes longer than that on its own. Leaselab described maintaining more than 100 brands across multiple platforms as an extensive operational cost before moving to Motomarks; the cost model on this page uses your own numbers.

Put the badge
on the application.

Create a free key, load the make list from the JSON API, and the badge follows the vehicle from application to signed quote. The next rebrand costs your team nothing.

Read the JSON API reference

Free includes 1,000 requests per day with an attribution link. Startup and Pro remove attribution.