Integration — S3 export¶
Public · Status: ✅ available · access scoping 🔄 proposed
1. Purpose¶
Consume the full per-convoy bundle from object storage — for data lakes, batch ETL, ML, or evidence archives. Best when you want the raw artifacts (point clouds, height-maps, photos, report), not just the scalar measurements.
2. When to use it¶
- You have a data-lake / warehouse pipeline that ingests files.
- You want the evidence (MP4, snapshot JPEGs, the PDF report) or the dense data (MCAP, Parquet).
3. Layout¶
Each completed convoy is uploaded under the device prefix:
| File | Contents |
|---|---|
payload.json |
the exact measurement payload (convoy + cars) — the canonical record |
convoy.mcap |
sensor recording (LiDAR / camera / events) for the passage |
signals.parquet |
per-frame derived signal time-series |
<car>.mp4 · snaps/<car>/*.jpg |
evidence video + snapshot images |
rasters/car<N>.png + car<N>.json |
per-car height-map (16-bit PNG) + geometry sidecar |
Start from payload.json (the structured record → data model); the other files are
addressed by deterministic bundle-relative names.
4. Access (🔄 proposed)¶
You don't get raw bucket credentials. Instead, your API key mints time-limited presigned URLs scoped to your organization's bundles — so access is auditable, revocable, and never crosses tenants.
- List/locate a convoy with the REST API.
- Ask for its artifacts:
{
"convoy_id": "cvy_8f3a",
"expires_at": "2026-06-15T12:15:00Z",
"files": [
{ "name": "payload.json", "url": "https://…signed…" },
{ "name": "convoy.mcap", "url": "https://…signed…" },
{ "name": "signals.parquet", "url": "https://…signed…" }
]
}
GET each presigned url directly (no auth header — the signature carries it) before expires_at
(default ~15 min); re-request to refresh.
For continuous ingestion, poll the REST list endpoint (or use 🔄 proposed completion webhooks) and pull each new convoy's artifacts. A dedicated read-only IAM principal or a mirrored bucket can be arranged for high-volume data-lake pipelines — ask the BulkScanPro team.