One POST per tool, all generated from the same manifest the in-app tools run on. This page derives from the live catalog: names, parameters and flags cannot drift from the backend.
Same base URL, same auth, same envelope — per tool.
Every tool is a single POST under the API base. Authentication and the response envelope are documented in the Reference; this page adds what varies per tool: the fields, the ceilings and the response.
POST https://haiyz.net/api/enterprise/v1/gis/buffer
X-Api-Key: haiyz_pk_live_xxxxxxxxxxxx
X-Api-Secret: haiyz_sk_live_xxxxxxxxxxxxxxxxxxxxxxxx
X-Api-User: [email protected]Two shapes: a stored file, or an inline JSON result.
File-producing tools store the output and answer with the standard envelope: the storage key, the suggested output filename, your input's key, per-tool result fields, and a usage block. Vector tools include the feature count, output CRS and geometry type:
keyoutputFilenameinputKeyusagefeatureCountcrsgeometryTypeThe bytes are fetched separately with the returned key (the app's download endpoint, or the run's artifact URL on the credit-model API) — Content-Disposition carries the filename.
JSON tools (coordinate conversion, measurement, point-in-polygon…) return their result inline in data — no stored file unless the tool says otherwise.
About X-Output-Filename and X-CRS
Safety rails that apply before any per-tool limit.
3 tools
POST /validate-convertValidate and convert shapefiles, GeoJSON, and KML files.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
sourceCrsrepairedCountbboxPOST /transform-crs/jsonTransform coordinates between coordinate reference systems.
| Field | Type | Required | Details |
|---|---|---|---|
source_crs | string | yes | |
target_crs | string | yes | |
points | array | yes | an array of { x, y } coordinate objects |
POST /transform-crs/csv| Field | Type | Required | Details |
|---|---|---|---|
file | file | yes | |
source_crs | string | yes | |
target_crs | string | yes |
transformedPointsThe JSON route is unmetered; the CSV route is metered. The catalog reports the toolKey as metered because the file path is.
POST /convert-coordinatesConvert lon/lat between decimal degrees (DD), degrees-minutes-seconds (DMS), and degrees-decimal-minutes (DDM).
| Field | Type | Required | Details |
|---|---|---|---|
from_format | string | yes | dd | dms | ddm |
points | array | yes | an array of { lon, lat } objects |
fromFormatresults1 tools
POST /extract-exifExtract GPS metadata from JPEG images and build a GeoJSON map.
| Field | Type | Required | Details |
|---|---|---|---|
files | file | yes | repeat the field once per file |
imagesinputKeysgeotaggedCounttotalCountgeojsonOutput11 tools
POST /line-to-polygonConvert a coordinate sequence into a closed polygon and compute geodetic area, perimeter, and shape statistics.
| Field | Type | Required | Details |
|---|---|---|---|
coordinates | array | yes | an array of [lon, lat] pairs — at least 3 |
POST /line-to-polygon/file| Field | Type | Required | Details |
|---|---|---|---|
file | file | yes |
keyinputKeystatsusagePOST /simplifyReduce the number of vertices in a geo-file with Douglas–Peucker simplification.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
toleranceTolerance (degrees) | number | optional | min 0.000001 · default 0.001 |
preserve_topologyPreserve topology (avoid self-intersections) | boolean | optional | default true |
verticesBeforeverticesAfterPOST /convex-hullCompute the smallest convex polygon that encloses every geometry in a geo-file.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
inputFeatureCounthullVerticesPOST /centroidsReplace every feature with its centroid point — turn polygons or lines into a points layer.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
methodPoint placement | string | optional | centroid | inside · default centroid |
inputGeometryTypePOST /bufferCreate buffer zones around points, lines, or polygons — a fixed distance in metres, computed in the local UTM zone.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
distance_mBuffer distance (metres) | number | optional | min 1 · default 100 |
dissolveDissolve overlapping buffers into one geometry | boolean | optional | default false |
cap_styleCap style (buffer ends) | string | optional | round | flat | square · default round |
dissolveddistanceMdistance_m may be negative to shrink polygons; zero is rejected.
POST /dissolveMerge features that share a column value into a single geometry, with an optional count, sum, mean, min or max of a second field.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
byGroup by column | string | optional | a column name read from `file` |
aggAggregate | string | optional | count | sum | mean | min | max · default count |
agg_fieldAggregate column | string | optional | a column name read from `file` |
inputFeatureCountgroupsgroupFieldPOST /clipCut a layer down to a boundary layer, keeping only the parts that fall inside it.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
maskClip boundary (polygons) | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
inputFeatureCountdroppedCountPOST /explodeSplit multipart features into one feature per part, so every polygon or line stands on its own row.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
inputFeatureCountmultipartCountpartsCreatedPOST /repairFix invalid geometries — self-intersections, unclosed rings and empty shapes — so the layer loads cleanly in any GIS.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
inputFeatureCountinvalidBeforeinvalidAfterdroppedCountPOST /concave-hullCompute a hull that follows the true shape of a point cloud more closely than a convex hull, tuned by a tightness ratio.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
ratioTightness | number | optional | min 0.05 · max 1 · default 0.3 |
inputFeatureCountratiohullVerticesPOST /gridGenerate a regular grid of square cells across a layer's extent, at a cell size you choose in metres.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
cell_size_mCell size (metres) | number | optional | min 1 · default 1000 |
clip_to_extentClip grid to the input | boolean | optional | default false |
inputFeatureCountrowscolscellSizeM3 tools
POST /distance-bearingCompute geodesic distance and forward/back bearing between a sequence of points.
| Field | Type | Required | Details |
|---|---|---|---|
points | array | yes | an array of { lon, lat } objects — at least 2 |
segmentstotal_distance_mtotal_distance_kmstraight_distance_mstraight_distance_kmis_closedpoint_countsegment_countPOST /point-in-polygonCheck whether points fall inside, outside, or on the boundary of a polygon, with geodesic distance to the nearest edge.
| Field | Type | Required | Details |
|---|---|---|---|
polygon | array | yes | an array of [lon, lat] pairs — at least 3 |
points | array | yes | an array of { lon, lat } objects |
resultsinside_countoutside_countboundary_countpoint_countPOST /area-lengthMeasure geodesic area and perimeter or length for every feature — accurate on the ellipsoid, not a flat approximation.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
inputFeatureCounttotalAreaM2totalLengthMmeasuredAreasmeasuredLengths2 tools
POST /mergeMerge 2–5 geo-files (shapefile, GeoJSON, KML) into a single layer with a unified CRS — each feature tagged with its source file.
| Field | Type | Required | Details |
|---|---|---|---|
filesFiles to merge (2–5) | file | yes | vector geodata (see the accepted-extensions list above) · 2–5 files |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
fileCountPOST /spatial-joinAttach the attributes of one layer to another by spatial relationship — intersects, within, contains, crosses, touches or overlaps.
| Field | Type | Required | Details |
|---|---|---|---|
fileInput file | file | yes | vector geodata (see the accepted-extensions list above) |
joinLayer to join from | file | yes | vector geodata (see the accepted-extensions list above) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
predicateSpatial relationship | string | optional | intersects | within | contains | crosses | touches | overlaps · default intersects |
howKeep unmatched features | string | optional | inner | left · default inner |
inputFeatureCountjoinFeatureCountmatchedCountpredicate3 tools
POST /raster-inspectUpload a GeoTIFF/DEM to see its CRS, bounds, resolution, and per-band statistics, plus a quick preview image.
| Field | Type | Required | Details |
|---|---|---|---|
file | file | yes |
inputKeypreviewKeypreviewPngB64crswidthheightbandCountresolutionboundsbandsusagePOST /cog-optimizeUpload a GeoTIFF to check whether it's a Cloud-Optimized GeoTIFF (tiled + overviews) and download an optimized copy.
| Field | Type | Required | Details |
|---|---|---|---|
fileRaster (GeoTIFF) | file | yes | GeoTIFF (.tif, .tiff, .geotiff) |
wasAlreadyCogissueswidthheightbandCountoriginalTiledoriginalOverviewCountoriginalCompressionoptimizedOverviewCountoptimizedCompressionPOST /zonal-statsSummarise raster values inside each polygon zone — mean, min, max, sum and count per feature.
| Field | Type | Required | Details |
|---|---|---|---|
fileZone polygons | file | yes | vector geodata (see the accepted-extensions list above) |
rasterRaster (GeoTIFF) | file | yes | GeoTIFF (.tif, .tiff, .geotiff) |
target_formatOutput format | string | yes | geojson | shp | kml | gml | gpkg | fgb | kmz | parquet |
bandRaster band | number | optional | min 1 · default 1 |
statsStatistics | string | yes |
inputFeatureCountzoneszonesWithDatabandstats5 tools
POST /remove-backgroundRemove the background from a photo automatically, right in your browser.
| Field | Type | Required | Details |
|---|---|---|---|
fileImage | file | yes | PNG, JPEG, WebP, BMP |
POST /enhance-qualitySharpen and re-encode an image for a cleaner result — Plus members get full resolution, higher quality, and an optional 2× upscale.
| Field | Type | Required | Details |
|---|---|---|---|
fileImage | file | yes | PNG, JPEG, WebP, BMP, TIFF, GIF |
upscale2× upscale | boolean | optional | default false |
POST /convert-formatConvert an image between PNG, JPG, WebP, BMP, TIFF, and GIF.
| Field | Type | Required | Details |
|---|---|---|---|
fileImage | file | yes | PNG, JPEG, WebP, BMP, TIFF, GIF |
target_formatTarget format | string | optional | png | jpeg | webp | bmp | tiff | gif · default png |
POST /image-watermarkAdd a text or logo watermark to a photo or graphic.
| Field | Type | Required | Details |
|---|---|---|---|
fileImage | file | yes | PNG, JPEG, WebP, BMP, TIFF, GIF |
wm_modeWatermark type | string | optional | text | image · default text |
textWatermark text | string | yes | |
logoImage to stamp | file | yes | PNG, JPEG, WebP, BMP, TIFF, GIF |
positionPosition | string | optional | diagonal | center | top-left | top-right | bottom-left | bottom-right · default bottom-right |
opacityOpacity | number | optional | min 0.05 · max 1 · default 0.4 |
Provide exactly one of text or logo — the engine rejects both or neither.
POST /merge-imagesStitch multiple images into one — stacked, side by side, or as a grid.
| Field | Type | Required | Details |
|---|---|---|---|
filesImages | file | yes | PNG, JPEG, WebP, BMP, TIFF, GIF · 2–12 files |
layoutLayout | string | optional | vertical | horizontal | grid · default vertical |
fileCountwidthheight11 tools
POST /ocrExtract text from a photo or scan — supports English, Arabic, or both together.
| Field | Type | Required | Details |
|---|---|---|---|
file | file | yes | |
lang | string | optional | eng | ara | eng+ara · default eng |
keyinputKeytextlangcharCountusagePOST /pdf-to-wordConvert a PDF's text and layout into an editable Word document.
| Field | Type | Required | Details |
|---|---|---|---|
filePDF file | file | yes |
POST /document-signPlace your signature on a PDF — draw it, upload it, or reuse a saved one.
| Field | Type | Required | Details |
|---|---|---|---|
file | file | yes | |
signature | file | yes | PNG only |
placements | json-string | yes | a JSON string: an array of { page, x, y, w, h } boxes in page fractions (0–1) |
This stamps a signature image into the pages — it is not a certified digital signature.
POST /merge-pdfCombine up to 20 PDFs into one document, in the order you choose.
| Field | Type | Required | Details |
|---|---|---|---|
filesPDF files (2–20) | file | yes | PDF · 2–20 files |
fileCountpageCountPOST /split-pdfExtract pages or page ranges from a PDF — as one part or several.
| Field | Type | Required | Details |
|---|---|---|---|
filePDF file | file | yes | |
rangesPages to extract | string | yes |
partCountA single range returns a PDF; several ranges return a ZIP (the real name is in outputFilename).
POST /compress-pdfShrink a PDF's file size by re-encoding its images and cleaning up its structure.
| Field | Type | Required | Details |
|---|---|---|---|
filePDF file | file | yes | |
qualityQuality | string | optional | screen | ebook | print · default ebook |
pageCountoriginalBytescompressedBytesalreadyOptimizedPOST /pdf-to-imagesRender each page of a PDF as a high-quality PNG image.
| Field | Type | Required | Details |
|---|---|---|---|
filePDF file | file | yes | |
dpiResolution (DPI) | string | optional | 72 | 150 | 300 · default 150 |
pageCountAlways returns a ZIP of page images.
POST /pdf-watermarkStamp text or a logo across every page of a PDF.
| Field | Type | Required | Details |
|---|---|---|---|
filePDF file | file | yes | |
wm_modeWatermark type | string | optional | text | image · default text |
textWatermark text | string | yes | |
logoImage to stamp | file | yes | PNG, JPEG, WebP, BMP, TIFF, GIF |
positionPosition | string | optional | diagonal | center | top-left | top-right | bottom-left | bottom-right · default diagonal |
opacityOpacity | number | optional | min 0.05 · max 1 · default 0.15 |
pageCountProvide exactly one of text or logo — the engine rejects both or neither.
POST /images-to-pdfTurn photos and scans into a single PDF, one image per page.
| Field | Type | Required | Details |
|---|---|---|---|
filesImages | file | yes | PNG, JPEG, WebP, BMP, TIFF, GIF · 1–20 files |
page_modePage size | string | optional | a4 | fit · default a4 |
pageCountfileCountPOST /fill-pdfType into a PDF's own form fields and download the filled document.
| Field | Type | Required | Details |
|---|---|---|---|
file | file | yes | |
values | json-string | yes | a JSON string: an object of AcroForm field name → value (up to the form-values limit) |
flatten | string | optional | true | false · default false |
fieldCountfilledCountflattenedPOST /rotate-pagesFix page orientation and drop unwanted pages, right on the thumbnails.
| Field | Type | Required | Details |
|---|---|---|---|
file | file | yes | |
operations | json-string | yes | a JSON string: { "rotations": { "<page>": 90|180|270 }, "delete": [pages] } — pages are 0-based; at least one operation |
pageCountrotatedCountdeletedCountIn the manifest, not in the catalog.
Two tools have no standalone page and never appear in the browsable catalog — they are invoked from inside other surfaces, and over the API. They are gated and metered like every other tool.
POST /workspace-exportConvert the workspace's visible layers to Shapefile, KML or CSV.
| Field | Type | Required | Details |
|---|---|---|---|
file | file | yes | the workspace layer as GeoJSON |
target_format | string | yes | shp | kml | csv | geojson |
base_name | string | optional |
featureCounttruncatedFieldsPOST /map-exportCompose a print-ready map sheet with a title, legend and north arrow.
| Field | Type | Required | Details |
|---|---|---|---|
image | file | yes | repeat the field once per fileone PNG capture per map block, repeated |
logo | file | optional | |
spec | json-string | yes | a JSON string describing the sheet: page (a4|a3|letter), orientation, title, legend items, attribution, CRS label and more |