API reference

Every endpoint enabled on production, generated from the API's own route table. 29 endpoints across 8 groups.

Base URL https://api.voxelion.ai. All requests need an Authorization: Bearer header unless marked otherwise — see Authentication.

Service

GET/health

Liveness check.

GET/api/docs

This document.

GET/api/public/pricingnone

The rate card: per-GB price for each launched engine, credit packs and top-up bounds.

Responses: 200 { perGbMillicents, engines[], packs[], minTopUpCents, maxTopUpCents, checkoutEnabled }

Unauthenticated and safe to poll from a browser. Lists only engines that are enabled here — it is a price list, not a roadmap.

Auth

POST/api/auth/request

Request a magic sign-in link.

Body: {"email":"string"}

POST/api/auth/verify

Exchange a magic token for a session JWT.

Body: {"token":"string"}

GET/api/auth/mesession|apikey

The identity behind the current token.

Deduplication

POST/api/dedupsession|apikey

Deduplicate a batch, synchronously. Returns the full report in the response.

Body: multipart/form-data: files[] (images or a .zip), maxDistance? (0-64, or 0-256 in volumetric mode), volumetric? (true|false; default auto-detect), engine? (health|curate; default: your account's)

Accepts: PNG, JPEG, WebP, TIFF, BMP, HEIC/HEIF, and DICOM (.dcm: uncompressed, RLE, JPEG-baseline, JPEG-2000; grayscale and RGB/YBR).

Responses: 200 DedupReport + chargedCents, balanceCents · 402 INSUFFICIENT_CREDITS · 403 CONSENT_REQUIRED / ACCOUNT_SUSPENDED

Use this for batches that fit in one request. For a large archive, queue a job instead.

POST/api/jobssession|apikey

Queue a large .zip archive for asynchronous deduplication. Returns immediately; poll the job for progress.

Body: multipart/form-data: file (.zip), maxDistance?

Responses: 202 { job } · 402 INSUFFICIENT_CREDITS · 403 CONSENT_REQUIRED / ACCOUNT_SUSPENDED

Credit is reserved at submission and settled when the run finishes. A failed job is refunded in full.

GET/api/jobssession|apikey

List this account's jobs, most recent first.

GET/api/jobs/:idsession|apikey

One job's status and progress.

Reports

GET/api/reportssession|apikey

List persisted reports. Includes `volumetric` and `volumeLeakage`, so scan runs are identifiable without fetching each one.

GET/api/reports/:idsession|apikey

One report in full: hashes, pairs, clusters — plus volumes, volumePairs, volumeClusters, volumeLeakage, redundantSlices and suppressedIntraVolume when the run was volumetric.

GET/api/reports/:id/manifestsession|apikey

The keep/drop manifest for a cleaned export. For volumetric reports the unit of removal is the SCAN: every slice of a redundant volume is dropped and the most complete copy kept — never N-1 slices of a series.

Usage

GET/api/profilesession|apikey

Account identity, consent status, and usage counts.

GET/api/billing/accountsession|apikey

Credit balance: balanceCents, heldCents, spendableCents.

GET/api/billing/historysession|apikey

The credit ledger: every top-up and every charge, with the balance each produced.

GET/api/billing/configsession|apikey

Current prices and credit packs.

GET/api/billing/invoicessession|apikey

Monthly usage statements available for this account.

GET/api/billing/invoices/:periodsession|apikey

One month's statement (period is YYYY-MM), with line items and totals.

GET/api/billing/receiptssession|apikey

Payment receipts for this account.

GET/api/billing/receipts/:idsession|apikey

One receipt in full.

GET/api/logssession|apikey

Request log for this account's API keys. `?keyId=` `?status=errors` `?limit=`.

Session traffic is not recorded, so this is exactly your integration's own history.

API keys

GET/api/keyssession|apikey

List this account's keys (masked).

POST/api/keyssession|apikey

Create a key. The secret is returned ONCE and never again.

Body: {"name":"string","live":"boolean?"}

DELETE/api/keys/:idsession|apikey

Revoke a key immediately.

Engines

GET/api/enginessession|apikey

Which engines this deployment offers and which one your account defaults to.

PUT/api/engines/defaultsession|apikey

Set your account's default engine.

Body: {"engine":"health|drive|curate"}

Responses: 400 BAD_ENGINE — unknown, or not enabled here

Reference generated from live API (https://api.voxelion.ai) on 2026-08-30. The endpoint list, error codes and limits on this page are produced from the API's own route table — if an endpoint is not listed here, it is not enabled on production.