ODRIVA / HTTPS API
Connect existing data
Upload from a script, gateway or existing system, then inspect sources, historical metrics and analysis in your workspace. Start with one test source.
Development and staging entry. An existing account or assisted onboarding is required. Full cloud acceptance is still pending.
Create a source
Sign in, add an authorized general data asset and create a data workspace. Choose an API source in Data connections and historical metrics. Enable synthetic for this test and declare cpu and memory with % units.
Save the source credential
Save the credential shown once after creation and its ingest endpoint. It is scoped to the source and workspace, and can be rotated or revoked. Keep it out of URLs, shared scripts and logs.
Send test data
Download the Python 3.11+ example. In Bash, run read below, enter the credential and press Enter, then replace <source-id>. The standard-library script generates synthetic CPU/memory readings; it does not measure your machine.
read -rs ODRIVA_SOURCE_TOKEN export ODRIVA_SOURCE_TOKEN python3 upload-source-samples.py \ --endpoint 'https://heineda.seletatech.com/api/odriva/v1/sources/<source-id>/events' \ --outbox ./odriva-source-outbox.db --duration 900 --interval 5A local SQLite outbox retains pending samples until each receives a durable acknowledgment. Resume with the same endpoint and outbox after interruption; --duration 0 only drains pending samples. Errors retain the queue and exit nonzero. Do not delete the queue to make a test pass.
Inspect history
After 15 minutes of uploads, select the source in the same workspace. Inspect CPU/memory curves, units, quality and receipt time, or download historical JSON. History remains after uploads stop; freshness becomes stale over time.
Ingestion contract
POST /api/odriva/v1/sources/<source-id>/events uses schemaVersion odriva.source.v1. Each sample contains a stable nonnegative sequence, timezone-aware observedAt, declared values and quality. Maximum 500 samples and 2 MiB per batch; the example sends at most 50. synthetic must match the source declaration; null means missing.
202 means durable acceptance, with INSERTED or DUPLICATE for each sample; analysis projection may still be pending. Preserve sequence, time and values on retry. Check credentials/scope for 403, identity content conflicts for 409, mapping/format for 422; retry 429/503 according to Retry-After.
Send one sample with curl
Create a separate test source, use read again to set its credential, and replace the endpoint. Do not share sequences with the continuous script. Retry only the curl part without regenerating sample.json; increment the sequence for a new sample.
python3 - <<'PY' > sample.json
import json
from datetime import UTC, datetime
print(json.dumps({"schemaVersion": "odriva.source.v1", "synthetic": True,
"samples": [{"sequence": 1, "observedAt": datetime.now(UTC).isoformat(),
"values": {"cpu": 25, "memory": 50}, "quality": "good"}]}))
PY
printf 'header = "Authorization: Bearer %s"\n' "$ODRIVA_SOURCE_TOKEN" | \
curl --config - --fail-with-body --header 'Content-Type: application/json' \
--data-binary @sample.json \
'https://heineda.seletatech.com/api/odriva/v1/sources/<source-id>/events'Existing systems and connectors
Existing gateways can map OPC UA or MQTT data and forward it over HTTPS. This release does not provide a universal OPC UA client or native MQTT broker. REST/OAuth currently offers a clearly labeled reference test platform. OAuth authorization does not establish PLC compatibility; real vendor support requires separate verification.
Current scope
Raw historical samples default to 30-day retention. A query covers at most 30 days and 5000 samples; narrow the window when truncated. Each workspace permits up to 100 nonrevoked sources, with an additional deployment tenant ceiling; paused sources count. No new Windows installer is available here. Existing Edge ingestion remains an optional path.