Submitting Video
This guide covers every way to get a video into Gaard Classify: the manual uploader in the web app, the classify API for automated pipelines, and re-running a video that is already stored.
Choose how to submit
Section titled “Choose how to submit”| Method | Best for | Metadata support |
|---|---|---|
| Web app uploader | Ad-hoc checks, spot testing, a handful of clips | No: use the API to attach metadata |
| Classify API | Camera integrations, batch pipelines, anything automated | Yes: metadata.json |
| Re-classify | Re-running a stored video after a configuration change | Inherits the original submission |
Upload from the web app
Section titled “Upload from the web app”The uploader is a three-step flow: select files, upload, done. It accepts several files at once and shows per-file progress.
-
Open the Upload view in the web app.
-
Drag video files onto the drop zone, or select Open File Dialog and pick them from your machine. Each selected file appears in a list with its name and size.
-
Select Upload and classify. Progress is shown as a percentage next to each file.
-
When every file reaches 100%, you see All video files have been sent for classification!. Select Upload again to submit more, or open the review workspace to work through the results.
Submit via the API
Section titled “Submit via the API”Automated integrations send video to POST /api/classify as a multipart/form-data request. The video is uploaded as a form field named video: not as a JSON body.
curl -X POST https://vision.gaard.ai/api/classify \ -H "Authorization: Bearer $API_KEY" \The full endpoint reference (every parameter, response shape, and related endpoint) lives in Endpoints. You need an API token to authenticate; see API Tokens.
Synchronous vs asynchronous
Section titled “Synchronous vs asynchronous”The sync query parameter decides whether the request waits for the result.
| Mode | Request | Response | Use it when |
|---|---|---|---|
| Asynchronous (default) | POST /api/classify | An id and an accepted_at timestamp: poll for the result later, or receive it by webhook | Throughput matters and you process results out of band |
| Synchronous | POST /api/classify?sync=true | The full classification result in the response body | You need the verdict inline in a single call |
The asynchronous response returns immediately:
{ "id": "66436fc66d24ab9cf81140eb", "accepted_at": "2024-05-14T16:05:58.444Z"}The id is the classify_id used by every other endpoint: retrieve the result with GET /api/result/<classify_id>.
Attaching metadata
Section titled “Attaching metadata”A metadata.json file lets you tag a submission with the site and camera it came from, so results are attributable in the review workspace and can be filtered by site and camera. All fields are optional.
{ "site_id": "134188", "camera_id": "VI01"}Send it as a second form field named metadata:
curl -X POST https://vision.gaard.ai/api/classify \ -H "Authorization: Bearer $API_KEY" \The full field list and fallback behaviour are documented in Metadata.
Re-classifying a stored video
Section titled “Re-classifying a stored video”When you change a threshold or add an exclusion zone, you often want to see how an existing result would change: without re-uploading the file. Re-classify runs the stored video through classification again.
-
In the review workspace, open a classification to bring up its detail view.
-
Select Reclassify. The button changes to Sent while the video is re-processed, and the view refreshes to the new result.
Re-classifying reuses the original video and metadata, so the new result is directly comparable to the old one.