{"service":"astrum-api","documentation":"JSON API — use the endpoints below.","auth":"entra","endpoints":[{"method":"GET","path":"/api/health/live","description":"Liveness probe (no database)"},{"method":"GET","path":"/api/health/ready","description":"Readiness probe including database connectivity"},{"method":"GET","path":"/api/health","description":"Alias for /api/health/ready"},{"method":"GET","path":"/api/catalog/constellations","description":"List LEO/MEO constellations (?orbitClass=Leo|Meo)"},{"method":"GET","path":"/api/catalog/satellites","description":"List GEO satellites (?longitude=&windowDegrees=30)"},{"method":"GET","path":"/api/catalog/update-status","description":"GEO, MEO, and LEO catalog update health and import history (optional orbit and status query filters for the history)"},{"method":"GET","path":"/api/catalog/inventory","description":"Every stored GEO, MEO, and LEO satellite"},{"method":"GET","path":"/api/surveys/magic-link","description":"Resolve survey from magic link token (?token=)"},{"method":"POST","path":"/api/surveys/verify","description":"Complete pre-site identity verification"},{"method":"GET","path":"/api/surveys","description":"List surveys (optional ?status=Assigned filter)"},{"method":"GET","path":"/api/surveys/{id}","description":"Get a single survey by GUID"},{"method":"POST","path":"/api/surveys","description":"Create a new survey"},{"method":"PUT","path":"/api/surveys/{id}","description":"Update a survey"},{"method":"POST","path":"/api/surveys/{id}/assign","description":"Assign surveyor and send assignment email"},{"method":"POST","path":"/api/surveys/{id}/resend-assignment","description":"Resend assignment email"},{"method":"POST","path":"/api/surveys/{id}/request-redo","description":"Request a field re-do of the whole survey and email the surveyor (one-location surveys only)"},{"method":"POST","path":"/api/surveys/{id}/complete","description":"Mark a survey in review complete (even if the field surveyor has not pressed Finish; no location re-do outstanding; no email)"},{"method":"POST","path":"/api/surveys/{id}/locations/{locationIndex}/redo","description":"Send one location back for recapture and email the surveyor; other locations stay in review"},{"method":"GET","path":"/api/surveys/{id}/history","description":"List survey event history"},{"method":"POST","path":"/api/surveys/{id}/upload","description":"Upload captured survey assets (multipart, magic-link token)"},{"method":"POST","path":"/api/surveys/{id}/upload/stage/manifest","description":"Stage survey upload manifest before sending photos"},{"method":"POST","path":"/api/surveys/{id}/upload/stage/asset","description":"Stage one captured photo for a survey upload"},{"method":"POST","path":"/api/surveys/{id}/upload/stage/complete","description":"Finalize a staged survey upload"},{"method":"POST","path":"/api/surveys/{id}/field-complete","description":"Mark the field survey finished (magic-link token; no more new locations)"},{"method":"GET","path":"/api/surveys/{id}/ephemeris","description":"TLEs for the survey's LEO/MEO constellation (magic-link token; ?lat=&lon= for LEO)"},{"method":"GET","path":"/api/surveys/{id}/capture","description":"Get uploaded capture package metadata and assets"},{"method":"GET","path":"/api/surveys/{id}/capture/assets/{assetId}/image","description":"Download a captured asset image"},{"method":"GET","path":"/api/surveys/{id}/locations","description":"List the survey's current capture locations"},{"method":"GET","path":"/api/surveys/{id}/locations/{locationIndex}/capture","description":"Get one location's capture package metadata and assets"},{"method":"GET","path":"/api/surveys/{id}/locations/{locationIndex}/capture/assets/{assetId}/image","description":"Download a captured asset image for one location"},{"method":"GET","path":"/api/surveys/{id}/capture/panorama","description":"Get sky panorama status (legacy stitch; Location 1)"},{"method":"GET","path":"/api/surveys/{id}/capture/panorama/image","description":"Download the stitched sky panorama (legacy; Location 1)"},{"method":"POST","path":"/api/surveys/{id}/capture/panorama/reprocess","description":"Re-run the legacy panorama stitch (Location 1)"},{"method":"GET","path":"/api/surveys/{id}/capture/panorama/markers","description":"List image assessment markers (Location 1)"},{"method":"POST","path":"/api/surveys/{id}/capture/panorama/markers","description":"Add an image assessment marker (Location 1)"},{"method":"PUT","path":"/api/surveys/{id}/capture/panorama/markers/{markerId}","description":"Update an image assessment marker (Location 1)"},{"method":"DELETE","path":"/api/surveys/{id}/capture/panorama/markers/{markerId}","description":"Delete an image assessment marker (Location 1)"},{"method":"GET","path":"/api/surveys/{id}/locations/{locationIndex}/capture/panorama/markers","description":"List image assessment markers for one location"},{"method":"POST","path":"/api/surveys/{id}/locations/{locationIndex}/capture/panorama/markers","description":"Add an image assessment marker for one location"},{"method":"PUT","path":"/api/surveys/{id}/locations/{locationIndex}/capture/panorama/markers/{markerId}","description":"Update an image assessment marker for one location"},{"method":"DELETE","path":"/api/surveys/{id}/locations/{locationIndex}/capture/panorama/markers/{markerId}","description":"Delete an image assessment marker for one location"},{"method":"GET","path":"/api/surveys/{id}/horizon-profile","description":"Download the horizon profile workbook (Location 1)"},{"method":"GET","path":"/api/surveys/{id}/locations/{locationIndex}/horizon-profile","description":"Download the horizon profile workbook for one location"},{"method":"DELETE","path":"/api/surveys/{id}","description":"Delete a survey"}]}