Skip to content

Getting started

1. Get an API key

Every /v1 route requires an API key. Create a free account on the landing page (/signup) and mint a key from your dashboard (/account) — the free plan includes 10k calls a month across up to 5 active keys, and the dashboard shows your usage live (per day and against your quota). Operators can also mint keys on any plan from the CLI:

python -m app.auth.cli create --plan pro --name "my-app"

The plaintext key (rok_…) is shown once at creation — store it somewhere safe. Only a hash is kept server-side. Lost a key? Revoke it in the dashboard and mint a new one.

2. Make your first request

export API_KEY=rok_...

curl -H "Authorization: Bearer $API_KEY" \
  "https://api.canovix.ro/v1/transport/vehicle_registry?limit=5"
import httpx

API_KEY = "rok_..."
BASE = "https://api.canovix.ro"

client = httpx.Client(base_url=BASE, headers={"Authorization": f"Bearer {API_KEY}"})

page = client.get("/v1/transport/vehicle_registry", params={"limit": 5}).json()
for row in page["data"]:
    print(row["county"], row["manufacturer"], row["vehicle_count"])
print(f'{page["pagination"]["total"]:,} rows total')
const API_KEY = "rok_...";
const BASE = "https://api.canovix.ro";

const res = await fetch(`${BASE}/v1/transport/vehicle_registry?limit=5`, {
  headers: { Authorization: `Bearer ${API_KEY}` },
});
const page = await res.json();
for (const row of page.data) {
  console.log(row.county, row.manufacturer, row.vehicle_count);
}
console.log(`${page.pagination.total} rows total`);

Every list response uses the same envelope:

{
  "data": [ ... ],
  "pagination": { "total": 382667, "count": 5, "limit": 5, "offset": 0, "has_next": true, "next_offset": 5 },
  "meta": { "api_version": "v1", "dataset": "vehicle_registry", "domain": "transport", "last_updated": "...", "generated_at": "..." },
  "links": { "self": "...", "next": "..." }
}

3. Find what's available

# All published datasets
curl -H "Authorization: Bearer $API_KEY" "https://api.canovix.ro/v1/datasets"

# Everything about one dataset: columns, types, row count, sample row, provenance
curl -H "Authorization: Bearer $API_KEY" "https://api.canovix.ro/v1/datasets/vehicle_registry"

# Full-text search across the catalog (diacritic-insensitive)
curl -H "Authorization: Bearer $API_KEY" "https://api.canovix.ro/v1/search?q=sanatate"

See Discovery and Search.

4. Explore interactively

  • Swagger UI at /docs — every dataset endpoint with its real response schema, no key needed to browse.
  • Postman — generate the OpenAPI file and import it (File → Import):

    uv run python dev-scripts/export_openapi.py     # writes ./openapi.json
    

    Set the imported collection's Authorization to Bearer Token with your key; every request inherits it.

Next steps