OriginChain
Industries · fleet, routing, supply graph

AI database for logistics. Telemetry, routes, and notes — one bearer token.

The problem

Fleet operators need answers that expire in seconds — where the trucks are, which depots are hubs, which shipments are late, what drivers logged about a damaged seal — and they're stitching telemetry, a graph database, and a search index together by hand.

The OriginChain answer

OriginChain holds telemetry, the routing graph, and the shipment-notes log on one store. SQL filters late shipments with one range scan, graph Dijkstra computes the shortest depot route in 12 ms over 800 edges, BFS traces multi-hop suppliers, and BM25 surfaces every note mentioning 'broken seal' in 18 ms. Single-tenant, region-pinned to where the trucks actually drive.

Dijkstra · 800 edges
~12 ms
BFS · 6k supplier edges
~14 ms
BM25 search p99
< 20 ms
tenancy
single-tenant region-isolated
what they use OriginChain for

One bearer token. One endpoint. Every query shape.

Each example below is a real call against the public HTTP API. Copy the curl, set $OC_TOKEN, and you'll see the same shape of response your app gets in production. Latency numbers are measured against a Storm-tier instance in ap-south-1.

Schemas you'd register

Register these once via oc schema put or the /v1/schema endpoint, and every example below resolves against them.

schema purpose key fields
fleet_telemetry Live location + reefer telemetry truck_id · ts · lat · lon · reefer_c · speed_kmh
warehouses Depot + warehouse metadata warehouse_id · lat · lon · country
shipments Active shipments shipment_id · src · dst · expected_eta · status
shipment_notes Free-text driver / dispatch notes note_id · shipment_id · ts · text
routes_graph Routing edges between depots from_warehouse · to_warehouse · distance_km

SQL for analytics and reconciliation

Standard SQL with JOIN, GROUP BY, HAVING, and window functions against the same store.

sql POST /v1/sql

Every shipment more than four hours past ETA

request: SELECT shipment_id, src, dst, EXTRACT(EPOCH FROM (now() - expected_eta))/60 AS late_min FROM shipments WHERE status <> 'delivered' AND expected_eta < now() - interval '4 hours' ORDER BY late_min DESC
filtered range scan · ~44 ms · schemas: shipments
curl
curl -X POST https://oc-acme.ap-south-1.originchain.ai/v1/sql \
  -H "Authorization: Bearer $OC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sql":"SELECT shipment_id, src, dst, EXTRACT(EPOCH FROM (now() - expected_eta))/60 AS late_min FROM shipments WHERE status <> ''delivered'' AND expected_eta < now() - interval ''4 hours'' ORDER BY late_min DESC"}'
response · application/json
{
  "rows": [
    { "shipment_id": "SH-9021", "src": "MUM-03", "dst": "BLR-01", "late_min": 412 },
    { "shipment_id": "SH-9108", "src": "DEL-01", "dst": "HYD-02", "late_min": 267 }
  ],
  "meta": { "latency_ms": 44 }
}

Full-text search with BM25

Unicode tokenizer, stop-words, language stemming. Phrase, OR, and field-scoped queries.

full-text · bm25 POST /v1/fts/search

Find every note mentioning a damaged seal

request: BM25 across shipment_notes.text in the last week
BM25 + Unicode tokenizer · ~18 ms · schemas: shipment_notes
curl
curl -X POST https://oc-acme.ap-south-1.originchain.ai/v1/fts/search \
  -H "Authorization: Bearer $OC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "schema": "shipment_notes",
    "field":  "text",
    "q":      "damaged seal OR broken seal",
    "filter": { "ts_gt": "now-7d" },
    "k":      50
  }'
response · application/json
{
  "rows": [
    { "note_id": "N-77104", "shipment_id": "SH-9021", "score": 8.41, "snippet": "...trailer arrived with broken seal at gate 3..." },
    { "note_id": "N-77118", "shipment_id": "SH-9108", "score": 7.92, "snippet": "...damaged seal noted by driver, photo attached..." }
  ],
  "meta": { "latency_ms": 18 }
}

Graph traversal

BFS, DFS, and weighted Dijkstra against ref edges already in the data.

graph traversal POST /v1/graph/{op}

Weighted shortest depot route

request: Dijkstra from MUM-03 to BLR-01, weighted by distance_km
~12 ms over 800 depot edges · schemas: routes_graph
curl
curl -X POST https://oc-acme.ap-south-1.originchain.ai/v1/graph/dijkstra \
  -H "Authorization: Bearer $OC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "schema": "routes_graph",
    "source": "MUM-03",
    "target": "BLR-01",
    "weight": "distance_km"
  }'
response · application/json
{
  "path": ["MUM-03", "HUB-PUN-01", "HUB-HYD-01", "BLR-01"],
  "total_distance_km": 1024,
  "hops": 3,
  "meta": { "latency_ms": 12 }
}
graph traversal POST /v1/graph/{op}

Trace multi-hop suppliers feeding a warehouse

request: BFS over the supplier feed-graph, max depth 3
~14 ms over 6k supplier edges · schemas: routes_graph
curl
curl -X POST https://oc-acme.ap-south-1.originchain.ai/v1/graph/bfs \
  -H "Authorization: Bearer $OC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "schema":    "supply_graph",
    "source":    "BLR-01",
    "edge":      "fed_by",
    "max_depth": 3
  }'
response · application/json
{
  "rows": [
    { "supplier_id": "SUP-2011", "hops": 2, "via": ["HUB-DEL-01"] },
    { "supplier_id": "SUP-3842", "hops": 3, "via": ["HUB-MUM-02", "HUB-HYD-01"] }
  ],
  "meta": { "latency_ms": 14 }
}
why one substrate

Cross-shape consistency, by construction.

When SQL, vector, full-text, and graph all read from the same hash-keyed k/v store, a row written at 09:14:02.118 is visible to every shape on the next read. No ETL window, no replication lag, no consistency tax across vendors.

single-tenant

Region-isolated dedicated instance

Your data sits in your region, on a dedicated instance with its own keys and its own resource budget. No noisy-neighbour. No shared control plane.

durable

PITR + cross-AZ replication

Every write goes to a durable WAL, replicated to a hot standby in a second AZ. Restore to any second in your retention window.

observable

OTLP metrics + audit log

Per-key latency histograms, hit rate on the plan cache, and an append-only audit log of every privileged action — exported via OTLP to your observability stack.

ready when you are

Ninety seconds to an endpoint. No stack to wire up.

Pick a region, pick a tier, and we provision a single-tenant instance on AWS. The first query you send is the first query we'll show you how to write — in English.

talk to a human