{"openapi":"3.1.0","info":{"title":"Routebase API","description":"Route optimization APIs over the routebase solver: single-route/day VRP, recurring field planning, and plan-together detour matching.","version":"0.1.0"},"paths":{"/v1/health":{"get":{"tags":["health"],"summary":"Health","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/day-plans":{"post":{"tags":["day-vrp"],"summary":"Create Day Plan","operationId":"create_day_plan_v1_day_plans_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DayPlanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/recurring-plans":{"post":{"tags":["recurring"],"summary":"Create Recurring Plan","operationId":"create_recurring_plan_v1_recurring_plans_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringPlanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Get Job","operationId":"get_job_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["jobs"],"summary":"Cancel Job","operationId":"cancel_job_v1_jobs__job_id__delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/detour-candidates":{"post":{"tags":["plan-together"],"summary":"Detour Candidates","operationId":"detour_candidates_v1_detour_candidates_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetourCandidatesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/insertions":{"post":{"tags":["plan-together"],"summary":"Insertions","operationId":"insertions_v1_insertions_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsertionsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Backbone":{"properties":{"stops":{"items":{"$ref":"#/components/schemas/PlannerStop"},"type":"array","minItems":2,"title":"Stops"},"max_route_minutes":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Route Minutes"}},"type":"object","required":["stops"],"title":"Backbone"},"DayPlanRequest":{"properties":{"stops":{"items":{"$ref":"#/components/schemas/DayStop"},"type":"array","minItems":1,"title":"Stops"},"depot":{"$ref":"#/components/schemas/Depot"},"matrix":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Matrix"},"vehicles":{"type":"integer","minimum":1.0,"title":"Vehicles","default":1},"max_route_minutes":{"type":"integer","minimum":1.0,"title":"Max Route Minutes","default":570},"allow_overtime":{"type":"boolean","title":"Allow Overtime","default":false},"extra_vehicles":{"type":"integer","minimum":0.0,"title":"Extra Vehicles","default":0},"time_budget_seconds":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Time Budget Seconds","default":5},"async":{"type":"boolean","title":"Async","default":false}},"type":"object","required":["stops","depot"],"title":"DayPlanRequest"},"DayStop":{"properties":{"id":{"type":"string","minLength":1,"title":"Id"},"location":{"anyOf":[{"$ref":"#/components/schemas/LatLng"},{"type":"null"}]},"index":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Index"},"service_minutes":{"type":"integer","minimum":0.0,"title":"Service Minutes","default":0}},"type":"object","required":["id"],"title":"DayStop"},"Depot":{"properties":{"location":{"anyOf":[{"$ref":"#/components/schemas/LatLng"},{"type":"null"}]},"index":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Index"}},"type":"object","title":"Depot"},"DetourCandidatesRequest":{"properties":{"backbone":{"$ref":"#/components/schemas/Backbone"},"candidates":{"items":{"$ref":"#/components/schemas/PlannerStop"},"type":"array","minItems":1,"title":"Candidates"},"max_detour_minutes":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Max Detour Minutes"},"top_k":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Top K"}},"type":"object","required":["backbone","candidates"],"title":"DetourCandidatesRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InsertionsRequest":{"properties":{"backbone":{"$ref":"#/components/schemas/Backbone"},"candidates":{"items":{"$ref":"#/components/schemas/PlannerStop"},"type":"array","minItems":1,"title":"Candidates"},"insert":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Insert"}},"type":"object","required":["backbone","candidates","insert"],"title":"InsertionsRequest"},"LatLng":{"properties":{"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},"type":"object","required":["lat","lng"],"title":"LatLng"},"PlannerStop":{"properties":{"id":{"type":"string","minLength":1,"title":"Id"},"location":{"$ref":"#/components/schemas/LatLng"},"service_minutes":{"type":"integer","minimum":0.0,"title":"Service Minutes","default":0}},"type":"object","required":["id","location"],"title":"PlannerStop"},"RecurringOptions":{"properties":{"effort":{"type":"string","enum":["fast","balanced","max"],"title":"Effort","default":"fast"},"solve_profile":{"type":"string","title":"Solve Profile","default":"auto"},"penalize_overtime":{"type":"boolean","title":"Penalize Overtime","default":true},"penalize_extra_vehicles":{"type":"boolean","title":"Penalize Extra Vehicles","default":true},"customer_spread":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Customer Spread"}},"type":"object","title":"RecurringOptions"},"RecurringPlanRequest":{"properties":{"tasks":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":1,"title":"Tasks"},"matrix":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Matrix"},"locations":{"anyOf":[{"items":{"$ref":"#/components/schemas/LatLng"},"type":"array"},{"type":"null"}],"title":"Locations"},"depot_index":{"type":"integer","minimum":0.0,"title":"Depot Index"},"vehicles":{"$ref":"#/components/schemas/RecurringVehicles"},"vehicle_calendar":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Vehicle Calendar"},"phases":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Phases"},"persons":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Persons"},"same_day":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Same Day"},"options":{"$ref":"#/components/schemas/RecurringOptions","default":{"effort":"fast","solve_profile":"auto","penalize_overtime":true,"penalize_extra_vehicles":true}}},"type":"object","required":["tasks","depot_index","vehicles"],"title":"RecurringPlanRequest"},"RecurringVehicles":{"properties":{"per_day":{"type":"integer","minimum":1.0,"title":"Per Day"},"max_route_minutes":{"type":"integer","minimum":1.0,"title":"Max Route Minutes","default":570},"start_end_at_depot":{"type":"boolean","title":"Start End At Depot","default":true}},"type":"object","required":["per_day"],"title":"RecurringVehicles"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}