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.
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 access is completely open. Connect and start querying immediately. Zero setup friction for developers and AI agents alike.
JSON request parameters, JSON response objects. Typed fields for providers, pricing, time slots, ratings, and booking confirmations.
Bookings are processed through Stripe with full PCI compliance. Payments go directly to the service provider's Stripe account.
The Local Service API exposes these tools through MCP. AI agents discover them automatically upon connection.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Returned by search_services and get_provider.
| Field | Type | Description |
|---|---|---|
| id | string | Unique provider identifier. Format: prov_ followed by 6 alphanumeric characters. |
| name | string | Business display name of the service provider. |
| rating | float | Average rating from 1.0 to 5.0, rounded to one decimal place. |
| reviews_count | integer | Total number of verified reviews for this provider. |
| price_range | price_range | Formatted price range string. Example: "$75 - $250". |
| categories | string[] | Array of category names this provider serves. Example: ["Plumbing", "Drain Cleaning"]. |
| location | coordinates | Object with lat, lng, address, city, zip fields. |
| distance_mi | float | Distance from the search location in miles. |
| next_available | time_slot | ISO 8601 datetime of the next open appointment slot. |
| verified | boolean | Whether the provider has been identity and license verified by Lokuli. |
| status | provider_status | Current status: active, paused, or inactive. |
| stripe_enabled | boolean | Whether the provider accepts Stripe payments through the API. |
| description | string | Provider's business description, up to 500 characters. |
| phone | string | Contact phone number in E.164 format. |
| website | string|null | Provider's website URL, or null if not provided. |
Returned by book_service.
| Field | Type | Description |
|---|---|---|
| id | string | Unique booking identifier. Format: book_ followed by 8 alphanumeric characters. |
| provider_id | string | Reference to the provider's ID. |
| provider_name | string | Business name of the booked provider. |
| status | booking_status | Booking status: confirmed, pending, cancelled, completed, no_show. |
| time_slot | object | Object with start and end ISO 8601 datetimes. |
| service_type | string | Category of service booked. Example: "Plumbing". |
| customer | object | Customer object with name, email, phone fields. |
| price | float | Total price in USD charged for the booking. |
| payment_status | string | Payment status: paid, pending, refunded, failed. |
| stripe_payment_id | string | Stripe payment intent ID. Format: pi_ followed by 24 characters. |
| created_at | string | ISO 8601 datetime when the booking was created. |
| notes | string|null | Optional customer notes for the provider. |
Returned by get_availability.
| Field | Type | Description |
|---|---|---|
| provider_id | string | The provider whose availability is being returned. |
| date | string | Date in YYYY-MM-DD format. |
| slots | array | Array of slot objects, each with slot_id, start, end, available fields. |
| slots[].slot_id | string | Unique slot identifier used to book this time slot. |
| slots[].start | time_slot | ISO 8601 start datetime of the slot. |
| slots[].end | time_slot | ISO 8601 end datetime of the slot. |
| slots[].available | boolean | true if the slot is open for booking, false if taken. |
| timezone | string | IANA timezone. Example: "America/Los_Angeles". |
Returned by get_reviews.
| Field | Type | Description |
|---|---|---|
| id | string | Unique review identifier. |
| provider_id | string | Provider this review belongs to. |
| rating | integer | Rating from 1 to 5. |
| text | string | Review body text, up to 2000 characters. |
| author | string | Display name of the reviewer. |
| date | string | ISO 8601 date when the review was posted. |
| provider_response | string|null | Provider's reply to the review, or null. |
| verified_booking | boolean | Whether this review is from a verified booking through the API. |
Returned by get_categories.
| Field | Type | Description |
|---|---|---|
| id | string | Unique category identifier. |
| name | string | Display name of the category. Example: "Plumbing". |
| slug | string | URL-safe slug. Example: "plumbing". |
| parent_category | string|null | Parent category name, or null if top-level. |
| provider_count | integer | Number of active providers in this category in the current service area. |
| description | string | Brief description of the category. |
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.
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.
| Event | Trigger | Status |
|---|---|---|
| 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 |
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.
Connect any MCP-compatible client. Auto-discovers tools and schemas. Works with Claude Desktop, Cursor, Windsurf, and all MCP clients.
Standard HTTP endpoints. Works with any language and any HTTP client. JSON request and response format.
Typed JavaScript/TypeScript SDK with auto-complete, error handling, and helper methods for Node.js and browser.
Pythonic SDK with type hints, async support, and built-in pagination for search results.
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.
| Status | Code | When 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. |
The API uses these custom types across response objects. Each type is documented below with its structure, possible values, and usage context.
coordinatesGeographic location with address components.
price_rangeFormatted price range string in USD.
time_slotISO 8601 datetime with timezone offset.
provider_statusProvider availability state in the system.
booking_statusLifecycle states of a booking.
rating_summaryAggregated rating data for a provider.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
The Local Service API is one part of the Lokuli ecosystem for local service booking. Explore the other platforms and entry points.
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.