For the Civil 3D plugin and any field software that can make HTTPS requests. Everything is JSON except file bodies, which are sent raw.
Send your API key (made under API keys, or by POST /api/login) in a header on every call:
X-API-Key: sc_xxxxxxxx (or Authorization: Bearer sc_xxxxxxxx)
| Method | Path | What |
|---|---|---|
| POST | /api/login | body {"email","password","label"} → {"api_key"} (a new key labelled for that device) |
| GET | /api/me | who the key belongs to |
| GET | /api/projects | projects you are a member of |
| POST | /api/projects | body {"name","client","description"} → the new project |
| GET | /api/projects/ID/files?folder=Field | current version of every file (folder optional) |
| PUT | /api/projects/ID/files/Field/day3.csv | upload: the body is the file itself; headers X-Source (device / app) and X-Note optional → {"id","version","checks"}. The same path again makes a new version. |
| GET | /api/projects/ID/files/Field/day3.csv | download the current version (?version=2 for an older one); headers X-File-Version, X-File-Sha256 |
| GET | /api/projects/ID/versions/Field/day3.csv | every version of that file |
| DELETE | /api/projects/ID/files/Field/day3.csv | delete every version (editors and owners) |
| POST | /api/projects/ID/share | body {"path","days","password","label"} (path "" = whole project) → {"url","expires"} |
| GET | /api/projects/ID/activity | the last 200 events |
| GET | /api/health | no key needed: {"ok":true} |
curl -X PUT "https://cloud.avgstools.com/api/projects/12/files/Field/day3.csv" -H "X-API-Key: sc_xxxxxxxx" -H "X-Source: Trimble Access" --data-binary @day3.csv
Errors come back as {"error": "..."} with a 4xx status. Checks (point counts, duplicate numbers, LAS header, DWG version...) are run on every upload and returned with it.