{"openapi":"3.1.0","info":{"title":"Next Generation Movers API","version":"0.6.1","description":"Nationwide interstate and long-distance household moves between any two US states, plus local moves in the DC/Maryland/Virginia area. Licensed carrier USDOT 3764697, MC 1341637. Free quotes at /quote/free; optional x402 paid endpoint at /quote.","contact":{"email":"mover@mail.grokbot.com"}},"servers":[{"url":"https://ngm-agent-api.nextgenmovers.workers.dev"}],"paths":{"/quote":{"post":{"summary":"Indicative price per tariff for a long-distance or local household move ($0.01); not a legal estimate","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"from_zip":{"type":"string","pattern":"^\\d{5}$","description":"Pickup 5-digit US ZIP, e.g. \"20850\""},"to_zip":{"type":"string","pattern":"^\\d{5}$","description":"Delivery 5-digit US ZIP in any US state, e.g. \"32801\". Over about 50 road miles is priced as long distance per cubic foot; shorter moves are priced hourly only when both ZIPs are in DC/MD/VA"},"move_date":{"type":"string","description":"Earliest pickup date, YYYY-MM-DD, e.g. \"2026-11-14\""},"home_size":{"type":"string","enum":["studio","1br","2br","3br","4br","5br+"],"description":"Home size: studio, 1br, 2br, 3br, 4br or 5br+. The easiest way to size the move; used to estimate cubic feet (long distance) or crew and hours (local). Ignored for long distance when cubic_feet or a sized inventory is given"},"bedrooms":{"type":"integer","minimum":0,"maximum":10,"description":"Number of bedrooms (0-10), e.g. 2; use instead of home_size"},"cubic_feet":{"type":"number","minimum":0,"description":"Total shipment cubic feet if known, e.g. 900. Takes priority over inventory, home_size and bedrooms for long distance (350 cf minimum billed)"},"inventory":{"type":"array","maxItems":500,"description":"Optional item list, e.g. [{\"name\":\"sofa\",\"quantity\":1,\"cubic_feet\":50}]. Give cubic_feet or weight_lbs per item (weight converted at 6.5 lb/cf); used instead of home_size when at least one item has a size","items":{"type":"object","properties":{"name":{"type":"string","description":"Item name, e.g. \"sofa\""},"quantity":{"type":"integer","minimum":1,"description":"How many of this item (default 1)"},"weight_lbs":{"type":"number","description":"Weight of one item in pounds"},"cubic_feet":{"type":"number","description":"Size of one item in cubic feet"}},"required":["name"]}},"specialty_items":{"type":"array","items":{"type":"string","enum":["piano_upright","piano_grand","piano_baby_grand","motorcycle","atv","pool_table","jacuzzi","appliance","aquarium","misc_bulky"]},"description":"Bulky items with a flat handling fee, e.g. [\"piano_upright\"]. Allowed: piano_upright, piano_grand, piano_baby_grand, motorcycle, atv, pool_table, jacuzzi, appliance, aquarium, misc_bulky"},"packing":{"type":"string","enum":["none","full"],"description":"\"full\" adds full packing at $1.25 per cf (long distance); \"none\" or omitted means no packing. Partial packing is priced at the survey"},"unpacking":{"type":"boolean","description":"Full unpacking at $1.25 per cf (long distance)"},"storage_months":{"type":"number","minimum":0,"maximum":24,"description":"Months of storage, $50 per 100 cf per month"},"stairs_flights":{"type":"integer","minimum":0,"description":"Flights of stairs, $75 per flight"},"long_carry_feet":{"type":"number","minimum":0,"description":"Long carry distance in feet, $100 per 75 ft"},"shuttle":{"type":"boolean","description":"Shuttle truck needed, $1.25 per cf, $700 minimum"},"extra_stops":{"type":"integer","minimum":0,"description":"Extra pickup or delivery stops, $150 each"},"safes":{"type":"integer","minimum":0,"description":"Number of safes, $500 each"},"guaranteed_delivery":{"type":"boolean","description":"Guaranteed delivery date, 42% of line haul (long distance)"},"crew_size":{"type":"integer","enum":[2,3,4],"description":"Local only: 2 movers $229/hr, 3 movers $259/hr, 4 movers $299/hr"},"est_hours":{"type":"number","description":"Local only: estimated labor hours (3-hour minimum)"}},"required":["from_zip","to_zip","move_date"]}}}},"x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"asset":"USDC","network":"eip155:8453"},"responses":{"200":{"description":"Indicative price with line-item breakdown and survey handoff"},"400":{"description":"Invalid input. Body: { error: string }. Not charged."},"402":{"description":"Payment required: x402, 0.01 USDC on Base (eip155:8453). Challenge in the PAYMENT-REQUIRED header; retry with PAYMENT-SIGNATURE."},"409":{"description":"A booking request already exists for this idempotency_key; the existing request is returned."},"413":{"description":"Body over 64 KB. Not charged."},"500":{"description":"Server error. Payment does not settle when the server fails."}}}},"/quote/free":{"post":{"summary":"Free indicative price per tariff (same as /quote, no payment); use first. Optional contact_name plus contact_phone or contact_email create a callback lead. 30 per hour per IP","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"from_zip":{"type":"string","pattern":"^\\d{5}$","description":"Pickup 5-digit US ZIP, e.g. \"20850\""},"to_zip":{"type":"string","pattern":"^\\d{5}$","description":"Delivery 5-digit US ZIP in any US state, e.g. \"32801\". Over about 50 road miles is priced as long distance per cubic foot; shorter moves are priced hourly only when both ZIPs are in DC/MD/VA"},"move_date":{"type":"string","description":"Earliest pickup date, YYYY-MM-DD, e.g. \"2026-11-14\""},"home_size":{"type":"string","enum":["studio","1br","2br","3br","4br","5br+"],"description":"Home size: studio, 1br, 2br, 3br, 4br or 5br+. The easiest way to size the move; used to estimate cubic feet (long distance) or crew and hours (local). Ignored for long distance when cubic_feet or a sized inventory is given"},"bedrooms":{"type":"integer","minimum":0,"maximum":10,"description":"Number of bedrooms (0-10), e.g. 2; use instead of home_size"},"cubic_feet":{"type":"number","minimum":0,"description":"Total shipment cubic feet if known, e.g. 900. Takes priority over inventory, home_size and bedrooms for long distance (350 cf minimum billed)"},"inventory":{"type":"array","maxItems":500,"description":"Optional item list, e.g. [{\"name\":\"sofa\",\"quantity\":1,\"cubic_feet\":50}]. Give cubic_feet or weight_lbs per item (weight converted at 6.5 lb/cf); used instead of home_size when at least one item has a size","items":{"type":"object","properties":{"name":{"type":"string","description":"Item name, e.g. \"sofa\""},"quantity":{"type":"integer","minimum":1,"description":"How many of this item (default 1)"},"weight_lbs":{"type":"number","description":"Weight of one item in pounds"},"cubic_feet":{"type":"number","description":"Size of one item in cubic feet"}},"required":["name"]}},"specialty_items":{"type":"array","items":{"type":"string","enum":["piano_upright","piano_grand","piano_baby_grand","motorcycle","atv","pool_table","jacuzzi","appliance","aquarium","misc_bulky"]},"description":"Bulky items with a flat handling fee, e.g. [\"piano_upright\"]. Allowed: piano_upright, piano_grand, piano_baby_grand, motorcycle, atv, pool_table, jacuzzi, appliance, aquarium, misc_bulky"},"packing":{"type":"string","enum":["none","full"],"description":"\"full\" adds full packing at $1.25 per cf (long distance); \"none\" or omitted means no packing. Partial packing is priced at the survey"},"unpacking":{"type":"boolean","description":"Full unpacking at $1.25 per cf (long distance)"},"storage_months":{"type":"number","minimum":0,"maximum":24,"description":"Months of storage, $50 per 100 cf per month"},"stairs_flights":{"type":"integer","minimum":0,"description":"Flights of stairs, $75 per flight"},"long_carry_feet":{"type":"number","minimum":0,"description":"Long carry distance in feet, $100 per 75 ft"},"shuttle":{"type":"boolean","description":"Shuttle truck needed, $1.25 per cf, $700 minimum"},"extra_stops":{"type":"integer","minimum":0,"description":"Extra pickup or delivery stops, $150 each"},"safes":{"type":"integer","minimum":0,"description":"Number of safes, $500 each"},"guaranteed_delivery":{"type":"boolean","description":"Guaranteed delivery date, 42% of line haul (long distance)"},"crew_size":{"type":"integer","enum":[2,3,4],"description":"Local only: 2 movers $229/hr, 3 movers $259/hr, 4 movers $299/hr"},"est_hours":{"type":"number","description":"Local only: estimated labor hours (3-hour minimum)"},"contact_name":{"type":"string"},"contact_phone":{"type":"string"},"contact_email":{"type":"string"},"notes":{"type":"string"}},"required":["from_zip","to_zip","move_date"]}}}},"responses":{"200":{"description":"Indicative price, booking link and phone, lead status"},"400":{"description":"Invalid input. Body: { error: string }. Not charged."},"413":{"description":"Body over 64 KB. Not charged."},"429":{"description":"Rate limit: 30 free quotes per hour per IP"}}}},"/book-deposit":{"post":{"summary":"Free date-hold request after a quote. Needs move_date plus contact_email or contact_phone. Date hold pending; the owners set the deposit and send the signed estimate","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"idempotency_key":{"type":"string","description":"Unique key per request, 8-64 letters, digits or dashes (a UUID works). Reusing it returns the existing request"},"quote_id":{"type":"string","description":"Optional quote_id from get_quote_free or get_quote, linking the request to that quote"},"move_date":{"type":"string","description":"Requested move date, YYYY-MM-DD, e.g. \"2026-11-14\""},"flexible_dates":{"type":"boolean","description":"true if the customer can move on nearby dates"},"from_zip":{"type":"string","description":"Pickup 5-digit US ZIP"},"to_zip":{"type":"string","description":"Delivery 5-digit US ZIP"},"contact_name":{"type":"string","description":"Customer name"},"contact_email":{"type":"string","description":"Customer email. contact_email or contact_phone is required"},"contact_phone":{"type":"string","description":"Customer phone. contact_email or contact_phone is required"},"notes":{"type":"string","maxLength":2000,"description":"Details for the movers, up to 2000 characters"}},"required":["move_date"]}}}},"responses":{"200":{"description":"Booking request received, status date_hold_pending"},"400":{"description":"Invalid input. Body: { error: string }. Not charged."},"409":{"description":"A booking request already exists for this idempotency_key; the existing request is returned."},"413":{"description":"Body over 64 KB. Not charged."},"500":{"description":"Server error. Payment does not settle when the server fails."}}}},"/health":{"get":{"summary":"Service health","responses":{"200":{"description":"ok"}}}}}}