{"ok":true,"method":"POST","supportedTools":[{"key":"BufferTool","name":"Buffer","description":"Makes a buffer around the input layer","parameters":[{"name":"Input Layer","description":"The input layer to buffer","type":"dropdown","defaultValue":""},{"name":"Distance","description":"The distance","type":"float","defaultValue":10},{"name":"Units","description":"The units for the distance","type":"dropdown","defaultValue":"miles","options":["feet","miles","kilometers","degrees"]}],"headless":true,"stateMode":"layers"},{"key":"ExportTool","name":"Export","description":"Export data","parameters":[{"name":"Layer","description":"layer to export","type":"dropdown","defaultValue":""},{"name":"Format","description":"format to export","type":"dropdown","defaultValue":"geojson"}],"headless":true,"stateMode":"layers"},{"key":"GroupTool","name":"Group","description":"Groups nearby features by distance and adds the grouped result as a new layer","parameters":[{"name":"Layer","description":"layer to group","type":"dropdown","defaultValue":""},{"name":"Distance","description":"distance threshold","type":"float","defaultValue":10,"min":0},{"name":"Units","description":"The units for the distance","type":"dropdown","defaultValue":"kilometers","options":["feet","miles","kilometers","degrees"]}],"headless":true,"stateMode":"layers"},{"key":"RandomPointsTool","name":"Random Points","description":"Adds random points within selected polygon","parameters":[{"name":"Points Count","description":"Number of random points to generate.","type":"int","defaultValue":10},{"name":"Inside Polygon","description":"Generate points inside polygon","type":"boolean","defaultValue":false},{"name":"Polygon","description":"Polygon to add random points within.","type":"dropdown","defaultValue":""}],"headless":true,"stateMode":"layers"},{"key":"AddAIGeneratedFieldTool","name":"Add AI-Generated Field","description":"Generate a new attribute field from existing feature attributes using AI","parameters":[{"name":"Input Layer","description":"The input layer to enrich","type":"dropdown","defaultValue":""},{"name":"Source Fields","description":"Comma-separated source fields to send to AI","type":"text","defaultValue":""},{"name":"Instruction","description":"The instruction used to generate the new field","type":"text","defaultValue":""},{"name":"Output Field Name","description":"The field to write","type":"text","defaultValue":""},{"name":"Output Type","description":"The output field type","type":"dropdown","defaultValue":"text","options":["text","number","boolean"]},{"name":"Overwrite Existing Field","description":"Overwrite existing values in the output field","type":"boolean","defaultValue":false}],"headless":true,"stateMode":"featureCollection"},{"key":"ConvertTextToNumericTool","name":"Convert Text to Numeric","description":"Convert text-like numeric attributes into numeric values","parameters":[{"name":"Input Layer","description":"The input layer to convert","type":"dropdown","defaultValue":""},{"name":"Input Field Name","description":"The text field to parse","type":"text","defaultValue":""},{"name":"Output Field Name","description":"The numeric field to write","type":"text","defaultValue":""},{"name":"Overwrite Existing Field","description":"Overwrite existing values in the output field","type":"boolean","defaultValue":false},{"name":"Use AI Fallback","description":"Use AI when rules-based parsing fails","type":"boolean","defaultValue":true}],"headless":true,"stateMode":"featureCollection"}],"spatial":{"crs":"EPSG:4326","coordinateOrder":"longitude,latitude","engine":"@turf/turf","measurementModel":"geodesic/web-oriented","precision":"not-survey-grade","warnings":[]},"notes":["First pass: headless execution is currently limited to tools that are safe without the browser UI.","Send request state.layers with stable ids and GeoJSON so params can reference them.","Layer-state tools use state.layers; featureCollection tools use state.featureCollection.","Tool validation failures return HTTP 200 with ok: false; unsupported tools and malformed API requests return 4xx.","GeoJSON coordinates are interpreted as EPSG:4326 longitude/latitude values and are suitable for lightweight web/runtime analysis, not survey-grade measurement."],"requestShape":{"tool":"BufferTool","params":{"Input Layer":"source-layer","Distance":5,"Units":"miles"},"state":{"layers":[{"id":"source-layer","name":"Source Layer","geojson":{"type":"FeatureCollection","features":[]}}],"bbox":[-118.5,33.5,-117.5,34.5]}}}