Developer Ecosystem
Build the future of mobility on SyncVelo
Open, secure and versioned interfaces for your fleet's devices, positions, trips, alerts, reports and drivers, with signed webhooks, a TypeScript SDK and a sandbox.
- REST & OpenAPI
- Signed webhooks
- TypeScript SDK
- Sandbox of simulated vehicles
1const api = 'https://api.syncvelo.com';2const { SYNCVELO_CLIENT_ID: id, SYNCVELO_CLIENT_SECRET: secret, SYNCVELO_ORG: org } = process.env;3 4const { access_token } = await fetch(`${api}/oauth/token`, {5 method: 'POST',6 headers: { Authorization: `Basic ${btoa(`${id}:${secret}`)}` },7 body: new URLSearchParams({ grant_type: 'client_credentials' }),8}).then((r) => r.json());9 10// Cursor pagination: follow next_cursor until it is null11let cursor: string | null = null;12do {13 const url = new URL(`${api}/v1/tenants/${org}/devices?limit=100`);14 if (cursor) url.searchParams.set('cursor', cursor);15 const page = await fetch(url, { headers: { Authorization: `Bearer ${access_token}` } }).then((r) => r.json());16 for (const d of page.items) console.log(d.id, d.status, d.latitude, d.longitude, d.speed_kph);17 cursor = page.next_cursor;18} while (cursor);Surfaces
Every way to connect, with controls built in
Each surface is designed with authorisation, tenancy and auditability from day one.
Public REST & OpenAPI
Devices, positions, trips, geofences, rules, alerts, reports and drivers, with cursor pagination and explicit versions.
Controls: OAuth2 client credentials, scopes, rate limits and daily quotas.
Event webhooks
Alerts, geofence entries and exits and completed trips, signed, retried with back-off and replayable.
Controls: Secret rotation without dropped events; one organization per client.
TypeScript SDK
A typed client generated from the OpenAPI document; it follows cursors and retries only where safe.
Controls: Semantic versioning and compatibility tests.
Sandbox
A separate organization with simulated vehicles, sample trips and test webhooks, reset on demand.
Controls: Isolated at the root: no parent and no access to real data.
Developers page in the console
API clients, scopes and webhook endpoints, managed by the organization owner, with the API reference.
Controls: Secrets shown once and stored only as fingerprints.
Forwarding and MQTT
Forwarding to other platforms and government servers, and MQTT for integrators. Planned (X5).
Controls: Not available today.
REST & OpenAPI
Predictable APIs that respect your tenants
Resource-oriented endpoints with cursor pagination, filters, idempotency keys and explicit versions. Every request carries full tenant policy.
- OAuth2 client credentials with fine-grained scopes
- Canonical SyncVelo IDs, never internal engine keys
- Idempotency keys and safe retries on writes
- Per-client rate limits and daily quotas
1const api = 'https://api.syncvelo.com';2const { SYNCVELO_CLIENT_ID: id, SYNCVELO_CLIENT_SECRET: secret, SYNCVELO_ORG: org } = process.env;3 4const { access_token } = await fetch(`${api}/oauth/token`, {5 method: 'POST',6 headers: { Authorization: `Basic ${btoa(`${id}:${secret}`)}` },7 body: new URLSearchParams({ grant_type: 'client_credentials' }),8}).then((r) => r.json());9 10// Cursor pagination: follow next_cursor until it is null11let cursor: string | null = null;12do {13 const url = new URL(`${api}/v1/tenants/${org}/devices?limit=100`);14 if (cursor) url.searchParams.set('cursor', cursor);15 const page = await fetch(url, { headers: { Authorization: `Bearer ${access_token}` } }).then((r) => r.json());16 for (const d of page.items) console.log(d.id, d.status, d.latitude, d.longitude, d.speed_kph);17 cursor = page.next_cursor;18} while (cursor);Webhooks
Real-time events, delivered reliably
Subscribe to alerts (opened, cleared, acknowledged, closed), geofence entries and exits, and completed trips. Every delivery is signed, retried with back-off and replayable for 30 days.
- HMAC-signed payloads with timestamp tolerance
- Automatic retries, dead-letter queue and replay
- A versioned event catalogue in the OpenAPI document
- Delivery logs in the console and through the API
1POST /your/webhook2webhook-id: 6f0c2d2e-1b55-8a4e-9c3f-8f9a2b7d1e403webhook-timestamp: 17923164674webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=5 6{7 "id": "6f0c2d2e-1b55-8a4e-9c3f-8f9a2b7d1e40",8 "type": "geofence.exited",9 "schema_version": "1.0",10 "organization_id": "1f7c…",11 "occurred_at": "2026-10-19T09:41:07.000Z",12 "created_at": "2026-10-19T09:41:08.214Z",13 "data": { "device_id": "8d2a…", "geofence_id": "c41e…" }14}SDK
A typed TypeScript client, and plain REST for everything else
The TypeScript SDK is generated from the OpenAPI document and shared with sandbox access; it is not on a public registry yet. Other languages call the REST API directly.
TypeScript
For servers: Node.js 20+, Deno, Bun and edge runtimes. Typed methods, cursors followed, safe retries and webhook verification.
import { SyncVelo } from '@syncvelo/sdk'Any other language
Python, Java, Go or anything that speaks HTTPS: use the REST API and the OpenAPI document, as in the samples above.
GET https://api.syncvelo.com/openapi.json
Integration lifecycle
From first API key to production, governed end to end
- 01
Register
An owner creates an API client on Developers in the console, with only the scopes it needs.
- 02
Authorize
The client exchanges its ID and secret for a short-lived access token (OAuth2 client credentials).
- 03
Subscribe
Register webhook endpoints, send test events, and try everything in the sandbox first.
- 04
Operate
Quotas, idempotency, retries and full tenant policy on every request.
- 05
Observe
Delivery logs, replay of failed deliveries, secret rotation and revocation.
Developer sandbox
Start building today
Get a sandbox tenant with simulated devices, sample trips and test webhooks. Developer access is currently available to pilot partners and integrators.
Code samples on this page are illustrative. The full API reference is shared with sandbox access.
Get started
Ready to move your world smarter?
See how SyncVelo can power your fleet, your partner business or your next integration. Personal walkthrough, real devices, your use case.



