Developer Portal — Free & Keyless

Build on the Local Service API

The developer API for searching, comparing, and booking local services

One MCP endpoint connects your app to 888 categories of local service providers. Real availability, real pricing, Stripe payments. Full schema docs, multi-language code examples, and reference documentation below. No API key. No cost. Ship today.

888
Service Categories
MCP
+ REST Protocols
$0
API Cost Forever
0
Keys Required
Quick Start Full Documentation List Your Service
Quick Start

Connect in 30 Seconds

Point any MCP-compatible client to the endpoint below. Your client auto-discovers every tool, its parameters, and response schemas. No registration. No API key. No waiting.

MCP Server Configuration// Add this to your MCP client config (Claude Desktop, Cursor, or any MCP client) { "mcpServers": { "lokuli": { "url": "https://lokuli.com/mcp" } } }

No API Key

MCP access is completely open. Connect and start querying immediately. Zero setup friction for developers and AI agents alike.

📦

JSON Everywhere

JSON request parameters, JSON response objects. Typed fields for providers, pricing, time slots, ratings, and booking confirmations.

💳

Stripe Payments

Bookings are processed through Stripe with full PCI compliance. Payments go directly to the service provider's Stripe account.

Available API Tools

The Local Service API exposes these tools through MCP. AI agents discover them automatically upon connection.

Tool Referencesearch_services // Find providers by query + location params: query, location, limit, sort_by get_categories // List all 888 service categories params: parent_category (optional) get_availability // Real-time open time slots params: provider_id, date_from, date_to book_service // Create booking with Stripe payment params: provider_id, slot_id, customer get_reviews // Ratings and review data params: provider_id, limit, sort get_provider // Full provider profile params: provider_id get_pricing // Service pricing details params: provider_id, service_type

Search for a Plumber Near 90027

The same API call in four formats. Pick your language. Every example searches for a plumber near zip code 90027 in Los Angeles and returns matching providers with ratings, pricing, and availability.

Pythonimport requests # Search for plumbers near 90027 via REST response = requests.get( "https://lokuli.com/api/search", params={ "query": "plumber", "location": "90027", "limit": 5 } ) data = response.json() for provider in data["providers"]: print(f"{provider['name']} — {provider['rating']}★ — {provider['price_range']}") print(f" Next available: {provider['next_available']}") print(f" Distance: {provider['distance_mi']} mi")
JavaScript / Node.js// Search for plumbers near 90027 via REST const params = new URLSearchParams({ query: "plumber", location: "90027", limit: 5 }); const response = await fetch( `https://lokuli.com/api/search?${params}` ); const data = await response.json(); data.providers.forEach(provider => { console.log(`${provider.name} — ${provider.rating}★ — ${provider.price_range}`); console.log(` Next available: ${provider.next_available}`); console.log(` Distance: ${provider.distance_mi} mi`); });
cURL# Search for plumbers near 90027 curl -X GET "https://lokuli.com/api/search" \ -G \ -d "query=plumber" \ -d "location=90027" \ -d "limit=5" \ -H "Accept: application/json" # Response: # { # "providers": [ # { # "id": "prov_8k2mX9", # "name": "RapidFlow Plumbing", # "rating": 4.8, # "reviews_count": 147, # "price_range": "$75 - $250", # "distance_mi": 1.4, # "next_available": "2025-01-15T09:00:00-08:00" # }, ... # ], # "total_results": 23 # }
MCP JSON (Tool Call)// MCP tool call — sent by your AI agent automatically { "method": "tools/call", "params": { "name": "search_services", "arguments": { "query": "plumber", "location": "90027", "limit": 5 } } } // MCP response — parsed by your AI agent { "content": [{ "type": "text", "text": "{\"providers\":[{\"id\":\"prov_8k2mX9\",\"name\":\"RapidFlow Plumbing\",\"rating\":4.8,\"reviews_count\":147,\"price_range\":\"$75 - $250\",\"distance_mi\":1.4,\"next_available\":\"2025-01-15T09:00:00-08:00\",\"category\":\"Plumbing\",\"verified\":true}],\"total_results\":23}" }] }
What You Can Build

8 Products You Can Ship on This API

The Local Service API is infrastructure. These are the products developers are building on top of it. Each use case is a standalone product or a feature integrated into an existing platform.

🤖

1. AI Personal Assistant

Build a conversational AI that books real-world services. A user says "find me a plumber for tomorrow morning" and your assistant searches providers, checks availability, presents options, and books the appointment with Stripe payment. Works with Claude, ChatGPT, Gemini, or any MCP-compatible LLM. The agent discovers tools automatically via MCP — no hardcoded API calls needed.

🏢

2. Property Management App

Tenants submit repair requests through your app. Your backend calls the API to find available contractors, presents quotes and time slots to the tenant, and books the repair. Property managers see a dashboard of all bookings. Maintenance history is tracked per unit. No more phone tag between tenants, managers, and contractors. The API handles provider discovery, scheduling, and payment.

🛒

3. Marketplace Integration

Add local services to an existing e-commerce or gig platform. A furniture store offers assembly at checkout. A car parts marketplace adds installation. A real estate platform adds moving services. Your users never leave your app — the Local Service API provides the provider network, availability, and payment infrastructure in the background. One API call adds an entire service marketplace to your product.

🏠

4. Smart Home Hub

Your smart home system detects an HVAC filter needs replacing or a water heater is underperforming. It automatically searches for nearby HVAC technicians, finds available slots, and presents the booking option on the homeowner's phone or smart display. Schedule routine maintenance from your thermostat interface. The API bridges the gap between IoT sensors and real-world service providers.

🚚

5. Fleet Management System

Manage vehicle maintenance for delivery fleets, rideshare companies, or rental car services. When a vehicle hits a mileage threshold or a driver reports an issue, your system automatically searches for the nearest mechanic with availability, books the service, and updates the fleet schedule. Track maintenance costs per vehicle. The API provides the local service provider network so you focus on fleet logistics.

🏨

6. Hotel Concierge Bot

Guests text or message a concierge bot to book spa appointments, city tours, restaurant reservations, airport transfers, or laundry services. The bot uses the API to search local providers near the hotel, check availability for the guest's dates, and book services. Works via SMS, WhatsApp, in-app chat, or in-room tablet. No human concierge staff needed for routine requests. The API handles the entire local service layer.

📋

7. Insurance Claims Automation

After an insurance claim is approved for property damage, your system automatically searches for qualified contractors — roofers, water damage restoration, glass repair — checks their availability, and schedules the repair. The policyholder picks a time slot and the contractor shows up. Reduces claim resolution time from weeks to days. The API provides the contractor network and scheduling infrastructure. You focus on claims processing.

🛡️

8. Home Warranty Platform

Homeowners with warranty plans report an issue — broken dishwasher, leaking pipe, faulty electrical outlet. Your platform uses the API to find covered contractors in the homeowner's area, checks availability, and dispatches the contractor automatically. Track work orders from request to completion. The API eliminates the manual dispatcher role. Contractor discovery, scheduling, and payment are handled programmatically through a single endpoint.

Complete Object Reference

Every API response returns typed JSON objects. Below is the full schema for each object type returned by the Local Service API. All fields are documented with their types and descriptions.

Provider Object

Returned by search_services and get_provider.

FieldTypeDescription
idstringUnique provider identifier. Format: prov_ followed by 6 alphanumeric characters.
namestringBusiness display name of the service provider.
ratingfloatAverage rating from 1.0 to 5.0, rounded to one decimal place.
reviews_countintegerTotal number of verified reviews for this provider.
price_rangeprice_rangeFormatted price range string. Example: "$75 - $250".
categoriesstring[]Array of category names this provider serves. Example: ["Plumbing", "Drain Cleaning"].
locationcoordinatesObject with lat, lng, address, city, zip fields.
distance_mifloatDistance from the search location in miles.
next_availabletime_slotISO 8601 datetime of the next open appointment slot.
verifiedbooleanWhether the provider has been identity and license verified by Lokuli.
statusprovider_statusCurrent status: active, paused, or inactive.
stripe_enabledbooleanWhether the provider accepts Stripe payments through the API.
descriptionstringProvider's business description, up to 500 characters.
phonestringContact phone number in E.164 format.
websitestring|nullProvider's website URL, or null if not provided.

Booking Object

Returned by book_service.

FieldTypeDescription
idstringUnique booking identifier. Format: book_ followed by 8 alphanumeric characters.
provider_idstringReference to the provider's ID.
provider_namestringBusiness name of the booked provider.
statusbooking_statusBooking status: confirmed, pending, cancelled, completed, no_show.
time_slotobjectObject with start and end ISO 8601 datetimes.
service_typestringCategory of service booked. Example: "Plumbing".
customerobjectCustomer object with name, email, phone fields.
pricefloatTotal price in USD charged for the booking.
payment_statusstringPayment status: paid, pending, refunded, failed.
stripe_payment_idstringStripe payment intent ID. Format: pi_ followed by 24 characters.
created_atstringISO 8601 datetime when the booking was created.
notesstring|nullOptional customer notes for the provider.

Availability Object

Returned by get_availability.

FieldTypeDescription
provider_idstringThe provider whose availability is being returned.
datestringDate in YYYY-MM-DD format.
slotsarrayArray of slot objects, each with slot_id, start, end, available fields.
slots[].slot_idstringUnique slot identifier used to book this time slot.
slots[].starttime_slotISO 8601 start datetime of the slot.
slots[].endtime_slotISO 8601 end datetime of the slot.
slots[].availablebooleantrue if the slot is open for booking, false if taken.
timezonestringIANA timezone. Example: "America/Los_Angeles".

Review Object

Returned by get_reviews.

FieldTypeDescription
idstringUnique review identifier.
provider_idstringProvider this review belongs to.
ratingintegerRating from 1 to 5.
textstringReview body text, up to 2000 characters.
authorstringDisplay name of the reviewer.
datestringISO 8601 date when the review was posted.
provider_responsestring|nullProvider's reply to the review, or null.
verified_bookingbooleanWhether this review is from a verified booking through the API.

Category Object

Returned by get_categories.

FieldTypeDescription
idstringUnique category identifier.
namestringDisplay name of the category. Example: "Plumbing".
slugstringURL-safe slug. Example: "plumbing".
parent_categorystring|nullParent category name, or null if top-level.
provider_countintegerNumber of active providers in this category in the current service area.
descriptionstringBrief description of the category.
Pricing & Rate Limits

Free Forever. No Rate Limits. No Key.

The Local Service API is free for all developers — personal projects, startups, and enterprise. No API key, no usage caps, no credit card. Here is how it compares to every alternative.

API Cost Rate Limit API Key Booking
Local Service API Free Unlimited Not required Full booking + Stripe
Yelp Fusion API $500/mo 5,000 calls/day Required No booking capability
Google Places API ~$17/1k calls Pay per call Required No booking capability
Thumbtack N/A No public API N/A No public API

The Local Service API provides both search and booking. Competitors offer search-only data with no ability to check availability or process payments. The Local Service API is the only local service API that covers the full workflow: search, compare, check availability, book, and pay.

Real-Time Booking Notifications

Coming soon: register a webhook URL and receive signed JSON payloads when events occur in bookings you created through the API. Build real-time dashboards, trigger follow-up workflows, or sync booking state with your database.

EventTriggerStatus
booking.created A new booking is confirmed and payment is processed through Stripe. Coming Soon
booking.cancelled A booking is cancelled by the customer or the provider. Includes cancellation reason. Coming Soon
booking.completed A service has been delivered and marked as complete by the provider. Coming Soon
provider.updated A provider updates their profile, availability schedule, or pricing information. Coming Soon

Webhook Payload Example

Planned Webhook Payload — booking.created{ "event": "booking.created", "timestamp": "2025-01-15T14:32:00Z", "data": { "booking_id": "book_Xk29mP4a", "provider_id": "prov_8k2mX9", "provider_name": "RapidFlow Plumbing", "service_type": "Plumbing", "status": "confirmed", "time_slot": { "start": "2025-01-16T09:00:00-08:00", "end": "2025-01-16T10:00:00-08:00" }, "price": 150.00, "stripe_payment_id": "pi_3Abc123Def456Ghi789J0" }, "signature": "sha256=a1b2c3d4e5f6..." }
SDKs & Libraries

Integration Methods

Multiple ways to connect to the Local Service API. MCP native and REST are available now. Language-specific SDKs are in development to provide typed interfaces, automatic retries, and helper methods.

MCP Native Available

Connect any MCP-compatible client. Auto-discovers tools and schemas. Works with Claude Desktop, Cursor, Windsurf, and all MCP clients.

// MCP config — add to your client { "mcpServers": { "lokuli": { "url": "https://lokuli.com/mcp" } } }

REST API Available

Standard HTTP endpoints. Works with any language and any HTTP client. JSON request and response format.

# Base URL for all REST endpoints https://lokuli.com/api/ # Example: search for providers GET /api/search?query=plumber&location=90027

npm Package Coming Soon

Typed JavaScript/TypeScript SDK with auto-complete, error handling, and helper methods for Node.js and browser.

# Install (coming soon) npm install @lokuli/sdk // Usage import { Lokuli } from '@lokuli/sdk'; const client = new Lokuli();

Python SDK Coming Soon

Pythonic SDK with type hints, async support, and built-in pagination for search results.

# Install (coming soon) pip install lokuli-sdk # Usage from lokuli import LokuliClient client = LokuliClient()

Error Codes & Responses

The API returns standard HTTP status codes with structured JSON error bodies. Every error includes a machine-readable code, a human-readable message, and a details object with field-level information for debugging.

StatusCodeWhen It Happens
400 bad_request Missing or invalid parameters. The details object lists which fields failed validation and why.
404 not_found The requested provider, booking, or resource does not exist. Check the ID format and value.
409 slot_taken The requested time slot was booked by someone else between availability check and booking attempt. Re-fetch availability and try another slot.
422 invalid_booking Booking data is structurally valid but logically incorrect — past dates, incomplete customer info, provider not accepting bookings, or service type mismatch.
500 server_error Internal server error. Retry the request. If persistent, the issue is on our side and will be resolved.

Error Response Format

Example — 409 Slot Taken{ "error": { "code": "slot_taken", "status": 409, "message": "The requested time slot is no longer available.", "details": { "slot_id": "slot_9xK3m", "provider_id": "prov_8k2mX9", "requested_time": "2025-01-15T09:00:00-08:00", "suggestion": "Re-fetch availability with get_availability to find open slots." } } }
Example — 400 Bad Request{ "error": { "code": "bad_request", "status": 400, "message": "Invalid or missing required parameters.", "details": { "fields": { "query": "Required. Must be a non-empty string.", "location": "Required. Must be a valid city, zip, or coordinate pair." } } } }
Example — 422 Invalid Booking{ "error": { "code": "invalid_booking", "status": 422, "message": "Booking could not be processed due to invalid data.", "details": { "reason": "Requested slot is in the past.", "slot_id": "slot_7pQ2n", "slot_start": "2025-01-10T09:00:00-08:00", "current_time": "2025-01-15T14:00:00-08:00" } } }
Data Types

Custom Type Definitions

The API uses these custom types across response objects. Each type is documented below with its structure, possible values, and usage context.

coordinates

Geographic location with address components.

"location": { "lat": 34.0987, // float, latitude "lng": -118.3265, // float, longitude "address": "...", // string, street "city": "Los Angeles", "zip": "90027" }

price_range

Formatted price range string in USD.

// Format: "$MIN - $MAX" // All values in USD "price_range": "$75 - $250" // Fixed price services: "price_range": "$50" // Quote-based services: "price_range": "Quote"

time_slot

ISO 8601 datetime with timezone offset.

// Full format with TZ offset "2025-01-15T09:00:00-08:00" // Timezone is always the // provider's local timezone // (currently America/Los_Angeles)

provider_status

Provider availability state in the system.

"active" // Accepting bookings "paused" // Temporarily unavailable "inactive" // No longer on platform // Only "active" providers // appear in search results

booking_status

Lifecycle states of a booking.

"confirmed" // Booked and paid "pending" // Awaiting payment "cancelled" // Cancelled by either party "completed" // Service delivered "no_show" // Customer did not show

rating_summary

Aggregated rating data for a provider.

{ "average": 4.8, // float 1.0-5.0 "count": 147, // total reviews "distribution": { "5": 112, "4": 25, "3": 6, "2": 2, "1": 2 } }

What You Can Book Through the API

From emergency plumbing to wedding photography. Every category returns structured provider data with availability and pricing. Use get_categories to retrieve the full list programmatically.

Plumbing Electrical HVAC Auto Repair Mobile Detailing House Cleaning Beauty & Wellness Personal Training Tutoring Pet Grooming Photography DJ Services Legal Services Tax Preparation Moving & Hauling Landscaping Pool Maintenance Pest Control Roofing Painting +868 more
Developer FAQ

Frequently Asked Questions

What is the Local Service API?

The Local Service API is a developer-facing interface for programmatically searching, comparing, and booking local services across 888 categories. It is powered by Lokuli and BookingClaw. It provides structured JSON data for service providers, real-time availability, pricing, reviews, and Stripe-powered booking. Developers integrate it into AI assistants, mobile apps, websites, smart home systems, property management platforms, or any software that needs access to local service providers.

Do I need an API key?

No. MCP access is completely open — no API key, no registration, no authentication. Point your MCP client to lokuli.com/mcp and start making requests. This removes all setup friction so you can prototype and ship without waiting for credentials, approval processes, or dashboard signups.

What programming languages are supported?

The API works with any language. MCP is protocol-level so any MCP client library works (Python, JavaScript, Go, Rust, etc.). REST endpoints accept standard HTTP requests from any HTTP client. The API returns JSON, which every modern language can parse. Dedicated SDKs for npm (@lokuli/sdk) and Python (lokuli-sdk) are coming soon with typed interfaces and helper methods.

What is MCP and why should I use it?

MCP (Model Context Protocol) is a standard protocol for AI agents to discover and call external tools. When your AI agent connects to lokuli.com/mcp, it automatically discovers all available tools, their parameter schemas, and response formats — no hardcoded API calls needed. The agent decides which tools to use based on the user's request. If you are building AI-powered applications, MCP is the native integration method. If you are building traditional web or mobile apps, REST works equally well.

How much does the API cost?

Free. No API fees, no usage tiers, no rate limits, no credit card required. This applies to personal projects and commercial products. Yelp Fusion charges $500/month with a 5,000 call/day limit. Google Places charges approximately $17 per 1,000 calls. Thumbtack has no public API at all. The Local Service API is unlimited and free because more integrations drive more bookings for service providers.

Can I build a commercial product on this API?

Yes. The API is free for commercial use. Build and sell products, charge your own users, integrate it into paid SaaS platforms, or use it in enterprise applications. There are no licensing fees, no revenue share requirements, and no usage caps on commercial projects. Several companies already build booking products, AI assistants, and property management tools on top of this API.

What happens if a time slot gets booked while my user is deciding?

The API returns a 409 error with the code slot_taken. This means someone else booked that slot between when you fetched availability and when you attempted to book. The error response includes a suggestion to re-fetch availability. Best practice: always re-check availability immediately before calling book_service, and handle 409 gracefully by showing updated slots to your user.

How do payments work?

All payments are processed through Stripe with full PCI compliance. When you call book_service, the API creates a Stripe payment intent and charges the customer. Payment goes directly to the service provider's connected Stripe account. The booking response includes a stripe_payment_id for tracking. There are no additional platform fees beyond standard Stripe processing fees.

Where is the API available?

The Local Service API is currently live in Los Angeles, California with 888 service categories and real provider data. This is production infrastructure serving live data — real providers, real availability, real pricing, real Stripe payments. The platform is expanding to additional cities as more providers join through lokuli.com/join.

Will there be webhook support?

Yes. Webhook support is coming soon. Planned events include booking.created, booking.cancelled, booking.completed, and provider.updated. You will register a URL endpoint and receive signed JSON payloads in real time. This enables building reactive systems — update your UI when a booking is confirmed, trigger follow-up workflows when a service is completed, or sync state with your database without polling.

What is the difference between LocalServiceAPI.com and Lokuli?

Lokuli is the platform — it is the marketplace where service providers list their businesses and customers book services. LocalServiceAPI.com is the developer-facing documentation and branding for the API layer that sits on top of Lokuli. When you connect to lokuli.com/mcp or call the REST endpoints, you are accessing the same provider network and booking infrastructure that powers the Lokuli consumer marketplace. BookingClaw is the AI booking engine that powers the intelligent matching and scheduling.

Can AI agents use this API autonomously?

Yes, that is the primary design goal. MCP was built specifically for AI agent integration. An AI agent connects to lokuli.com/mcp, auto-discovers all tools, and calls them based on user intent. The agent handles the entire workflow — searching, comparing, checking availability, and booking — without any human developer writing API calls. This is how AI personal assistants, concierge bots, and agentic workflows interact with local services.

Part of the Lokuli Network

The Local Service API is one part of the Lokuli ecosystem for local service booking. Explore the other platforms and entry points.

Start Building on the Local Service API

888 categories. MCP + REST. Full schema docs. Multi-language examples. Error reference. $0 cost. No API key. The infrastructure layer for local services is ready. Ship your integration today.

Get Started Full Documentation List Your Service