Your whole lot, anywhere you work.
The LeadLocate API gives every salesperson live access to their dealership's inventory and a safe way to bring creative work home: search the lot, pull any vehicle, get a Facebook Marketplace listing ready to post, and save the ads, images, videos and templates you make in ChatGPT, Claude, Gemini, Canva or any AI tool straight into LeadLocate.
Want a hand? Pick your AI on the rightat the bottom of the screen. We copy a complete setup guide, you paste it in, and your AI walks you through every step.
Quick start
- Sign in to LeadLocate, then open your user profile. In the API Keys section, create a key under Personal API Keys and copy it. It is shown once. On your phone, open the LeadLocate menu, tap your name, then tap API Keys.
- Check the connection. You should see your name and your dealership.
curl https://leadlocate.com/api/v1/me \ -H "Authorization: Bearer YOUR_KEY" - Search the lot and open a Marketplace listing kit for any vehicle.
curl "https://leadlocate.com/api/v1/inventory?q=tahoe&condition=used" \ -H "Authorization: Bearer YOUR_KEY"
Authentication
Every call except the documentation and the OpenAPI file needs a personal API key. Send it in the Authorization header as a bearer token. X-Api-Key works too.
A key belongs to one salesperson and reads only that salesperson's dealership. It stops working the moment it is revoked on the user profile, the user is deactivated, or the dealership account is paused. LeadLocate keeps only a secure fingerprint of each key and never shows it again after it is created, so treat a key like a password.
The API reads inventory and can create new work, but it can never delete or change anything that already exists, never reaches customer records, and never sends a message to anyone. There is no PUT, PATCH or DELETE anywhere in the API.
Create in your CRM
Send a JSON body with POST. Each call adds one new item that belongs to the salesperson who owns the key, and returns where it was saved. Files are fetched from a public https link, such as a Canva, InVideo or ChatGPT export link.
| Endpoint | Creates | Body |
|---|---|---|
POST /files | A File Library file: JPG, PNG, GIF, WebP image up to 25 MB, MP4, MOV or WebM video up to 250 MB, PDF up to 50 MB. Returns the share link. | file_url, optional name, folder |
POST /designs | A Design Studio design built around a finished image, ready to open and edit. | file_url, optional name, format (original, feed45, square, story, landscape) |
POST /templates | A text message or email template. Saved only, never sent. | type (sms or email), title, body, optional subject |
POST /notes | A sticky note on your My Office desk. | text, optional color |
POST /todos | A To Do for yourself. | title, optional notes, due (YYYY-MM-DD HH:MM, dealership time), priority (1 high, 2 normal, 3 low) |
GET /folders | Your File Library folder names, to pick where a file goes. |
curl -X POST https://leadlocate.com/api/v1/files \
-H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" \
-d '{"file_url":"https://example.com/telluride-ad.png","name":"Telluride weekend ad"}'
A new folder name is created for you. Daily limits keep accounts safe: 100 files, 50 designs, 50 templates, 100 notes and 100 To Dos per person per day. Repeating the same request within 15 minutes returns the first result instead of a duplicate.
Your account
GET/me
The salesperson and dealership this key belongs to.
{
"user": { "name": "John Freeman", "email": "john@example.com" },
"dealership": {
"name": "VIP Motors", "city": "Dallas", "state": "TX", "zip": "75202",
"inventory_connected": true
}
}
Search inventory
GET/inventory
Every vehicle on the lot, live from the dealership's inventory feed. All filters are optional and can be combined.
| Parameter | What it does |
|---|---|
q | Free text such as 2021 tahoe or white suv. Matches year, make, model, trim, VIN, stock number, color, body style and drivetrain. Every word must match. |
condition | new or used |
make | Exact make, for example Chevrolet |
model | Model contains this text, for example Tahoe |
body_style | For example SUV, Truck, Sedan, Minivan |
year_min, year_max | Model year range |
price_min, price_max | Price range in US dollars |
mileage_max | Highest odometer reading |
sort | price_asc, price_desc, year_desc or mileage_asc. The default is new vehicles first, then lowest price. |
limit, offset | Paging. Up to 100 per page, 25 by default. |
{
"dealership": { "name": "VIP Motors", "city": "Dallas", "state": "TX", "zip": "75202", "inventory_connected": true },
"meta": { "fetched_at": "2026-09-23T06:04:37+00:00", "stale": false, "partial": false,
"collecting": false, "total": 8, "returned": 1, "offset": 0, "limit": 1 },
"vehicles": [{
"id": "KNDNC5H36P6297761",
"title": "2023 Kia Carnival EX",
"condition": "used", "year": 2023, "make": "Kia", "model": "Carnival", "trim": "EX",
"price": 33166, "mileage": 14836, "exterior_color": "Panthera Metal", "body_style": "Van",
"vin": "KNDNC5H36P6297761", "stock_number": "P6297761P",
"photo": "https://...jpg",
"links": {
"self": "https://leadlocate.com/api/v1/inventory/KNDNC5H36P6297761",
"marketplace": "https://leadlocate.com/api/v1/inventory/KNDNC5H36P6297761/marketplace"
}
}]
}
meta.stale is true when the live feed did not answer and you are seeing the last complete copy. meta.collecting is true while a newly connected store's first inventory pass is still running.
One vehicle
GET/inventory/{id}
Full details for one vehicle: price, MSRP, mileage, colors, engine, transmission, drivetrain, fuel, photos and the vehicle's page on the dealership website. The id can be the id from a search result, the VIN, or the stock number. A vehicle that has sold returns 404.
Marketplace listing kit
GET/inventory/{id}/marketplace
Everything needed to list the vehicle on Facebook Marketplace from the salesperson's own account. Fields follow the order of Facebook's vehicle form and use Facebook's own option labels, so each one drops straight in. The description is written for Marketplace: clean, specific, no financing claims and no outside links.
{
"vehicle_id": "KNDNC5H36P6297761",
"title": "2023 Kia Carnival EX",
"marketplace": {
"post_url": "https://www.facebook.com/marketplace/create/vehicle",
"fields": {
"vehicle_type": "Car/Truck",
"photos": ["https://...jpg"],
"location_zip": "75202", "location_city": "Dallas, TX",
"year": 2023, "make": "Kia", "model": "Carnival EX",
"mileage": 14836, "price": 33166,
"body_style": "Minivan", "exterior_color": null, "interior_color": "Gray",
"vehicle_condition": null, "fuel_type": "Gasoline",
"transmission": "Automatic transmission", "clean_title": null,
"description": "2023 Kia Carnival EX\n14,836 miles, Panthera Metal exterior, Gray interior.\n..."
},
"needs_seller_input": ["vehicle_condition"],
"guidance": ["Post from the salesperson's own Facebook account and review every field before publishing.", "..."],
"listing_url": "https://www.dealer-site.com/vehicle/..."
}
}
needs_seller_input lists anything the salesperson has to choose before publishing, such as the condition of a used vehicle. A field is null when the inventory feed does not say for certain, for example a factory color name with no plain color in it. The full photo set is on listing_url.
Use it in ChatGPT, Claude and Gemini
LeadLocate works right inside ChatGPT, Claude and Gemini. Add LeadLocate in any of them, then sign in with your LeadLocate email and password when asked. There is no key to copy. The assistant can read your inventory and save new work to your CRM, and it can never delete or change what is already there.
To add it yourself as a custom connector in ChatGPT, Claude, Gemini, Claude Code, Codex, Gemini CLI, Cursor or any other MCP client, use this address:
https://leadlocate.com/api/mcp
Then ask in plain words:
- "How many used trucks do we have, and what is the price range?"
- "Find a white SUV under $30,000 with fewer than 60,000 miles."
- "Write a Facebook Marketplace listing for our newest Tahoe."
- "Make a square ad for our used F-150s and save it to my Design Studio."
- "Save that video to my File Library in a folder called Walkarounds."
Gemini
In Gemini on the web, open Settings, then Connected Apps, add a custom app and paste https://leadlocate.com/api/mcp. Sign in with your LeadLocate email and password and allow access. LeadLocate then works in Gemini on the web and on your phone. Custom apps in Gemini are available with a personal Google account in the US.
Tools
| Tool | What it does |
|---|---|
search_inventory | Finds vehicles by condition, make, model, body style, year, price, mileage or free text. New first, then lowest price. |
get_vehicle | Full details for one vehicle by stock number, VIN or id. |
get_marketplace_listing | A Facebook Marketplace listing kit in the order Facebook asks for it, signed by you, ready to review and post from your own account. |
get_inventory_summary | Totals, new and used counts, makes, body styles and the price range of the whole lot. |
get_profile | The salesperson and dealership the connection is signed in as. |
save_to_file_library | Saves an image, video or PDF from the conversation (or a link) to your File Library and returns the share link. |
save_to_design_studio | Saves a finished ad as a new Design Studio design in the size you choose. |
create_message_template | Saves a text message or email template. Nothing is sent. |
add_office_note | Adds a sticky note to your My Office desk. |
create_todo | Adds a To Do to your list. |
list_file_library_folders | Lists your File Library folder names. |
Your own agents and adapters
Server side agents can use the same MCP server with a personal API key sent as a bearer token. Create a key in the API Keys section of your LeadLocate profile. For example, in Claude Code:
claude mcp add --transport http leadlocate https://leadlocate.com/api/mcp --header "Authorization: Bearer YOUR_KEY"
The OpenAI Responses API and the Claude Messages API MCP connector take the same address with your key as the authorization token. OAuth clients discover sign in on their own from https://leadlocate.com/.well-known/oauth-protected-resource/api/mcp.
Use it with Muse
Muse can work with your LeadLocate inventory directly. Ask Muse to connect a custom connector, give it the OpenAPI address below, and paste your API key when it asks for one.
https://leadlocate.com/api/v1/openapi.json
Then ask in plain words:
- "Show me every used SUV on our lot under $35,000."
- "What came in this week that I could show a family of five?"
- "Get the 2023 Carnival ready for Facebook Marketplace and list it from my account."
Errors and limits
Errors come back as JSON with a stable code and a readable message.
{ "error": { "code": "unauthorized", "message": "That API key is not valid or has been revoked." } }
| Status | Code | Meaning |
|---|---|---|
| 401 | unauthorized | No key, or the key is not valid or was revoked. |
| 403 | user_disabled, account_paused | The user is inactive, or the dealership account is paused. |
| 404 | not_found | Unknown endpoint, or the vehicle is no longer in inventory. |
| 429 | rate_limited | More than 120 requests in one minute. Wait for Retry-After seconds. |
Every authenticated response carries X-RateLimit-Limit and X-RateLimit-Remaining.
Support
Questions or ideas for what you want next? Contact LeadLocate. Use of the API is covered by the Terms of Service and the Privacy Policy.