{"openapi":"3.1.0","info":{"title":"MargTor Ltd. API","description":"Public API of MargTor Ltd. — EV knowledge, open datasets, TCO tool and MCP server for AI agents. Content: CC BY 4.0.","version":"1.0.0"},"paths":{"/api/":{"get":{"summary":"Root","operationId":"root_api__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/events":{"get":{"summary":"Get Events","operationId":"get_events_api_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/enquiries":{"post":{"summary":"Create Enquiry","operationId":"create_enquiry_api_enquiries_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnquiryCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Enquiry"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feed.xml":{"get":{"summary":"Feed Xml","operationId":"feed_xml_api_feed_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/feed.json":{"get":{"summary":"Feed Json","operationId":"feed_json_api_feed_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/knowledge":{"get":{"summary":"List Knowledge","operationId":"list_knowledge_api_knowledge_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/knowledge.md":{"get":{"summary":"Knowledge Index Md","operationId":"knowledge_index_md_api_knowledge_md_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/knowledge/notes":{"get":{"summary":"List Notes","operationId":"list_notes_api_knowledge_notes_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/knowledge/notes/{slug}.md":{"get":{"summary":"Note Md","operationId":"note_md_api_knowledge_notes__slug__md_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/knowledge/notes/{slug}":{"get":{"summary":"Note Detail","operationId":"note_detail_api_knowledge_notes__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/group":{"get":{"summary":"Group Info","operationId":"group_info_api_group_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/knowledge/{slug}.md":{"get":{"summary":"Knowledge Article Md","operationId":"knowledge_article_md_api_knowledge__slug__md_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/knowledge/{slug}":{"get":{"summary":"Knowledge Article","operationId":"knowledge_article_api_knowledge__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/{page}.md":{"get":{"summary":"Page Markdown","operationId":"page_markdown_api_pages__page__md_get","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datasets":{"get":{"summary":"Datasets Index","operationId":"datasets_index_api_datasets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/datasets/{key}.json":{"get":{"summary":"Dataset Json","operationId":"dataset_json_api_datasets__key__json_get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datasets/{key}.csv":{"get":{"summary":"Dataset Csv Route","operationId":"dataset_csv_route_api_datasets__key__csv_get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/tco":{"get":{"summary":"Tco Route","operationId":"tco_route_api_tools_tco_get","parameters":[{"name":"km_per_day","in":"query","required":false,"schema":{"type":"number","maximum":500,"minimum":10,"default":150,"title":"Km Per Day"}},{"name":"petrol_kes_per_litre","in":"query","required":false,"schema":{"type":"number","maximum":500,"minimum":50,"default":180,"title":"Petrol Kes Per Litre"}},{"name":"fleet_size","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":1,"default":1,"title":"Fleet Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat":{"post":{"summary":"Chat","operationId":"chat_api_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bookings/slots":{"get":{"summary":"Booking Slots","operationId":"booking_slots_api_bookings_slots_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/bookings":{"post":{"summary":"Create Booking","operationId":"create_booking_api_bookings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bookings/{booking_id}.ics":{"get":{"summary":"Booking Ics","operationId":"booking_ics_api_bookings__booking_id__ics_get","parameters":[{"name":"booking_id","in":"path","required":true,"schema":{"type":"string","title":"Booking Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/oauth/calendar/status":{"get":{"summary":"Status","operationId":"status_api_oauth_calendar_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/oauth/calendar/login":{"get":{"summary":"Login","operationId":"login_api_oauth_calendar_login_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/oauth/calendar/callback":{"get":{"summary":"Callback","operationId":"callback_api_oauth_calendar_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"BookingIn":{"properties":{"name":{"type":"string","maxLength":120,"minLength":2,"title":"Name"},"email":{"type":"string","format":"email","title":"Email"},"company":{"type":"string","maxLength":160,"minLength":2,"title":"Company"},"phone":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Phone","default":""},"topic":{"type":"string","maxLength":600,"minLength":2,"title":"Topic"},"slot_start":{"type":"string","title":"Slot Start"},"lang":{"type":"string","title":"Lang","default":"en"}},"type":"object","required":["name","email","company","topic","slot_start"],"title":"BookingIn"},"ChatIn":{"properties":{"session_id":{"type":"string","maxLength":80,"minLength":8,"title":"Session Id"},"message":{"type":"string","maxLength":1500,"minLength":1,"title":"Message"},"lang":{"type":"string","title":"Lang","default":"en"}},"type":"object","required":["session_id","message"],"title":"ChatIn"},"Enquiry":{"properties":{"name":{"type":"string","maxLength":120,"minLength":2,"title":"Name"},"company":{"type":"string","maxLength":160,"minLength":2,"title":"Company"},"email":{"type":"string","format":"email","title":"Email"},"phone":{"type":"string","maxLength":40,"minLength":6,"title":"Phone"},"country":{"type":"string","maxLength":80,"minLength":2,"title":"Country"},"solution":{"type":"string","maxLength":120,"minLength":2,"title":"Solution"},"fleet_size":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Fleet Size","default":""},"message":{"type":"string","maxLength":4000,"minLength":5,"title":"Message"},"id":{"type":"string","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["name","company","email","phone","country","solution","message"],"title":"Enquiry"},"EnquiryCreate":{"properties":{"name":{"type":"string","maxLength":120,"minLength":2,"title":"Name"},"company":{"type":"string","maxLength":160,"minLength":2,"title":"Company"},"email":{"type":"string","format":"email","title":"Email"},"phone":{"type":"string","maxLength":40,"minLength":6,"title":"Phone"},"country":{"type":"string","maxLength":80,"minLength":2,"title":"Country"},"solution":{"type":"string","maxLength":120,"minLength":2,"title":"Solution"},"fleet_size":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Fleet Size","default":""},"message":{"type":"string","maxLength":4000,"minLength":5,"title":"Message"}},"type":"object","required":["name","company","email","phone","country","solution","message"],"title":"EnquiryCreate"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}