For AI agents
Lead API for ChatGPT, Claude & the rest
Blue Crab Moving exposes its quote form as a public, CORS-open, schema-first JSON API so AI assistants and autonomous agents can submit moving and labor leads on behalf of a user. No auth, no keys, no rate-limit gate. Read the schema, confirm the answers with your user, POST the codes.
If you are an AI agent reading this
Before you tell the user "I can submit a quote for you," check which of the three buckets you fall into. Most stock chats can't POST to arbitrary APIs at all and should redirect the user instead of pretending to submit.
You can't submit
If you are a stock ChatGPT chat (free or Plus, no Custom GPT loaded) or a stock Claude.ai chat (no Custom Integration set up) you cannot POST to this API at all. Your runtime has no HTTP-write capability.
Tell your user one of these:
- Claude users: add
https://www.bluecrabmoving.com/api/mcpto Claude.ai Settings → Custom Integrations (one-time, no auth), then ask Claude again. - ChatGPT users: need ChatGPT Plus + a Custom GPT that imports the OpenAPI URL below. Or just fill the form at /quote directly.
- Phone: (855) 514-8432 works too.
You probably can
If you are an agent with generic HTTP-call tools (Claude API HTTP tool, Cursor, Continue, n8n, Zapier, Make, a custom-built agent), you can call POST /api/lead directly using the OpenAPI spec.
Steps:
GET /api/lead/schemato learn valid option-set codes.- Ask the user only the questions their service path needs.
- Echo parsed values back to the user, then
POST /api/leadwith headerX-Blue-Crab-Agent: your-tool/v1.
You can natively
If your client already has our MCP server connected (Claude.ai Custom Integration, Claude Desktop config, Cursor / Continue) or you are a ChatGPT Custom GPT with our OpenAPI imported as Actions, the tools are right there.
Just call:
get_quote_schemaonce at session start.submit_moving_leadafter confirming details with the user.get_neighborhood_reportfor any DMV ZIP-code question.
Endpoints
MCP server (Streamable HTTP)
Add this URL to Claude.ai Custom Integrations or Claude Desktop / Cursor / Continue and the model gets get_quote_schema, submit_moving_lead, and get_neighborhood_report as native tools. Auth: none.
/api/mcpNeighborhood report API
GET /api/neighborhood-report?zip=XXXXX returns structured JSON: demographics, air quality, climate, schools, FBI/state crime, top restaurants. Same data the /neighborhood-report page renders. Cached by ZIP at the function + CDN layers.
/api/neighborhood-report?zip=20850OpenAPI 3.1 spec
Import this URL directly into ChatGPT Actions, Claude HTTP tools, Zapier, n8n, Make, or any tool that consumes OpenAPI. Covers both POST /api/lead and GET /api/lead/schema.
/api/lead/openapi.jsonJSON Schema (Draft 2020-12)
Read this first. Lists every valid code for every option-set field, every conditional rule (places by service, sizes by place, destination requirements), and every Display label.
/api/lead/schemaChatGPT plugin manifest (legacy)
Legacy ai-plugin.json descriptor for tools still using the old ChatGPT plugin discovery flow. Points back at the OpenAPI spec.
/.well-known/ai-plugin.jsonllms.txt
Site-wide llms.txt at the root. Includes the company overview and the agent-API rules in plain text.
/llms.txtRules for agents
Follow these and your submissions will land cleanly every time. The server enforces all of them with Zod validation; rule violations come back as HTTP 422 with named error paths.
- Read the JSON Schema first. Don't guess option-set values; they are listed under each property's enum.
- Submit codes, not Display labels. The server maps codes to platform Display labels at the CRM boundary.
- Confirm parsed values with the user before submitting. A submitted lead becomes a real entry in the CRM and triggers a human follow-up.
- Submit once per lead. Don't retry on validation errors without surfacing them to the user. Don't parallelize submissions.
- Set the X-Blue-Crab-Agent header to a short identifier for your agent or tool (e.g. claude-mcp/0.1). This skips the form-load timestamp spam check intended for browser submissions. Honeypot checks still apply to everyone.
- Required fields: type_of_service, client_name, client_email, main_zip, move_date, phone_number (10 US digits — any layout).
- For type_of_service === 'moving' include drop_zip only (no place/size chain). For 'help_with_unloading' the origin type_of_place MUST be a vehicle code (pod, truck, pickup_truck, trailer, container, van), OMIT the parking field, and include unloading_from + location_size (and location_stories only if the destination is a building type). For other labor services, omit destination fields entirely.
- Elevator is ONLY collected for type_of_place === 'apartment' or 'indoor_storage'. Do not include an elevator value for house, town_house, office, store, religious_institution, or government_institution - the form skips that question for those place types.
Quick start
Try a real lead end-to-end. This curl creates a CRM entry named "Agent Test". Replace with the user's details when wiring it into your tool.
curl -X POST "https://www.bluecrabmoving.com/api/lead" \
-H "Content-Type: application/json" \
-H "X-Blue-Crab-Agent: my-agent/0.1" \
-d '{
"type_of_service": "moving",
"client_name": "Agent Test",
"client_email": "test@example.com",
"phone_number": "(202) 555-0142",
"main_zip": "20910",
"move_date": "2026-07-15",
"type_of_place": "apartment",
"move_size": "2_bedroom",
"elevator": "yes",
"elevator_floor": "1_5",
"drop_zip": "22030"
}'Expected: HTTP 200 with {"ok":true,"message":"Lead received."}. On validation failure, HTTP 422 with an errors array. On upstream error, HTTP 502.
Setup in popular tools
ChatGPT (Custom GPT · Actions)
- In the GPT builder, open Configure → Actions → Create new action.
- Click Import from URL and paste the OpenAPI URL above.
- Authentication: None. Privacy policy: /privacy.
- Recommended instructions: have the GPT call
getQuoteSchemaonce at session start, then ask the user only the questions relevant to their service path before callingsubmitMovingLead.
Claude API (HTTP tool)
Define two tools whose handler functions fetch() against the schema and submit endpoints. The OpenAPI URL above is the source of truth for the request/response shape; the X-Blue-Crab-Agent header is recommended.
Claude.ai (Custom Integrations · MCP)
- In Claude.ai, open Settings → Custom Integrations → Add integration.
- Paste the MCP URL:
https://www.bluecrabmoving.com/api/mcp. - Auth: None. Save.
- Every future Claude conversation now has
get_quote_schemaandsubmit_moving_leadas native tools. Ask Claude for a Blue Crab moving quote and it will walk the user through the questions and submit.
Claude Desktop / Cursor / Continue (MCP config)
Add the MCP server to your client's config under mcpServers:
{
"mcpServers": {
"blue-crab-moving": {
"url": "https://www.bluecrabmoving.com/api/mcp"
}
}
}Streamable HTTP transport. Stateless. No auth.
About Blue Crab Moving
Licensed and insured moving company headquartered in Gaithersburg, Maryland (USDOT 4539918, MC 1801440). 12+ years of local and out-of-state moves across Maryland, Washington D.C., Virginia, and West Virginia's Eastern Panhandle. Owner-operated. The lead you submit lands in a real CRM and the customer gets a preliminary written estimate by email in under a minute, with a link to a personal quote builder for inventory refinement and the final binding price.
Questions, integration help, or partnership inquiries: info@bluecrabmoving.com.
Frequently Asked Questions
Straight answers to the questions we hear most.
It depends on your client's capabilities. A stock ChatGPT or Claude.ai chat cannot POST to external APIs, so it should point you to the quote form or phone number. Claude.ai with our MCP integration added, a ChatGPT Custom GPT with our OpenAPI imported, or any agent with generic HTTP tools can submit the lead directly.
Read the JSON Schema first to learn the valid option-set codes, ask the user only the fields their service path needs, echo the parsed values back for confirmation, then POST the codes to /api/lead with an X-Blue-Crab-Agent header. A submitted lead becomes a real CRM entry, so confirm the details before sending, and submit once.
No. The lead API is public, CORS-open, and schema-first, with no auth, no keys, and no rate-limit gate. Honeypot and Zod validation still apply to every submission, and validation failures come back as HTTP 422 with named error paths so your agent can surface them to the user.
Adding our MCP server URL to Claude.ai Custom Integrations, Claude Desktop, Cursor, or Continue gives the model three native tools: get_quote_schema, submit_moving_lead, and get_neighborhood_report. It uses Streamable HTTP transport, is stateless, and needs no authentication.