Response Envelope: All API responses use
{ "code": 0, "message": "success", "data": {...} }
(↗ envelope spec).
Auth endpoints require a Bearer token (24h, no refresh).
Charger Side
/v1/device/* — Traffic from the Twin simulation engine
Request Body
{
"sn": "ACME-COV-001",
"model": "TP-AC22",
"manufacturer": "Tellus Power",
"firmware_version": "1.5.0"
}Response
{
"code": 0, "message": "success",
"data": { "device_id": "uuid", "device_secret": "hex64", "expires_in": 86400 }
}Request Body
{
"device_id": "uuid",
"device_secret": "hex64",
"grant_type": "client_credentials"
}Response
{ "access_token": "hex64", "token_type": "Bearer", "expires_in": 86400 }
POST
/v1/device/heartbeat
IMPLEMENTED Bearer
30s heartbeat
Request Body
{ "timestamp": "2026-05-10T14:00:00Z", "status": "online" }Response
{ "code": 0, "data": { "commands": [] } }Request Body
{
"timestamp": "...", "connector_id": 1, "state": "charging",
"voltage": 400, "current": 450, "power": 180, "energy_delivered": 1.5, "soc": 42
}Response
{ "code": 0, "data": null }
POST
/v1/device/events
IMPLEMENTED Bearer
Lifecycle events (plug-in, plug-out, start, stop)
Request Body
{ "timestamp": "...", "event_type": "plug_in", "connector_id": 1, "data": {} }Response
{ "code": 0, "data": null }
POST
/v1/device/charging-records
IMPLEMENTED Bearer
CDR upload after session
Request Body
{
"record_id": "uuid", "connector_id": 1, "start_time": "...", "end_time": "...",
"energy": 12.5, "max_power": 180, "cost": 4.38, "currency": "GBP",
"stop_reason": "soc_target_reached"
}Response
{ "code": 0, "data": null }
GET
/v1/device/commands
IMPLEMENTED Bearer
Long-poll for pending commands
Response
{ "code": 0, "data": { "command_id": "uuid", "command": "start_charging", ... } }
POST
/v1/device/command-status
IMPLEMENTED Bearer
Report command execution result
Request Body
{ "command_id": "uuid", "status": "completed", "timestamp": "..." }Response
{ "code": 0, "data": null }
POST
/v1/device/site
IMPLEMENTED
Register site with associated devices (Acme extension)
Request Body
{
"site_id": "uuid", "name": "...", "address": "...", "postcode": "...",
"lat": 52.42, "lng": -1.50, "power_capacity": 176, "device_ids": ["uuid1", ...]
}Response
{ "code": 0, "data": { "site_id": "uuid" } }
POST
/v1/device/firmware/status ↗ spec
IMPLEMENTED Bearer
Firmware upgrade progress (fields: firmware_version, status, optional progress, message)
Request Body
{ "firmware_version": "2.2.0", "status": "downloading", "progress": 45, "message": "Downloading..." }Response
{ "code": 0, "message": "success", "data": null }Tellus Console Surface
Flat /v1/* paths — Traffic from the Tellus Console and operator-side consumers
Core Endpoints
GET
/v1/health
IMPLEMENTED
Health check + version
Response
{ "status": "ok", "timestamp": "...", "version": "0.8.0" }
GET
/v1/operators
IMPLEMENTED
List operators visible to authenticated user
Response
{ "code": 0, "data": [{ "id": "acme-charging-uk", "name": "Acme Charging Network UK", "country": "GB", "status": "active" }] }
GET
/v1/operators/:id
IMPLEMENTED
Get operator by ID
Response
{ "code": 0, "data": { "id": "acme-charging-uk", "name": "Acme Charging Network UK", "country": "GB", "status": "active" } }
GET
/v1/sites
IMPLEMENTED
List sites with live status
Response
{
"code": 0, "data": {
"items": [{ "site_id": "uuid", "name": "...", "location": { "lat": 52.42, "lng": -1.50 },
"total_connectors": 4, "status_summary": { "idle": 3, "charging": 1, "fault": 0 },
"power_capacity": 176, "created_at": "..." }],
"total": 3
}
}
GET
/v1/sites/:id
IMPLEMENTED
Single site detail
GET
/v1/devices
IMPLEMENTED
List devices with connectors
Response
{
"code": 0, "data": {
"items": [{ "device_id": "uuid", "sn": "ACME-COV-001", "model": "TP-AC22",
"status": "online", "connectors": [...], "site_id": "uuid" }],
"total": 11
}
}
GET
/v1/devices/:id
IMPLEMENTED
Single device detail
GET
/v1/devices/:id/connectors
IMPLEMENTED
Device connector states
Response
{
"code": 0, "data": {
"items": [{ "connector_id": 1, "status": "charging", "power": 180, "soc": 42 }],
"total": 2
}
}
GET
/v1/charging-records
IMPLEMENTED
Query charging records (paginated)
Response
{ "code": 0, "data": { "items": [...], "total": 15, "page": 1, "size": 20 } }
GET
/v1/charging-records/:id
IMPLEMENTED
Individual CDR lookup
GET
/v1/aggregated/energy
IMPLEMENTED
Energy time-series aggregation
Response
{
"code": 0, "data": {
"granularity": "hour", "series": [...],
"total": { "charge_energy": 45.2, "discharge_energy": 9.1, "max_power": 360 }
}
}
GET
/v1/commands/:id
IMPLEMENTED
Command execution status
POST
/v1/devices/:id/connectors/:cid/start
IMPLEMENTED
Remote start charging
Request Body
{ "charge_power": 180, "target_soc": 80 }Response
{ "code": 0, "data": { "command_id": "uuid", "status": "queued" } }
POST
/v1/devices/:id/connectors/:cid/stop
IMPLEMENTED
Remote stop charging
Request Body
{ "reason": "user_request" }Response
{ "code": 0, "data": { "command_id": "uuid", "status": "queued" } }
POST
/v1/devices/:id/connectors/:cid/discharge
IMPLEMENTED
Remote V2G discharge
Request Body
{ "discharge_power": 180, "duration": 300, "min_soc": 20 }Response
{ "code": 0, "data": { "command_id": "uuid", "status": "queued" } }
POST
/v1/devices/:id/connectors/:cid/schedule
NOT IMPL
Set charging schedule
POST
/v1/oauth/token
NOT IMPL
Operator OAuth token
POST
/v1/control/flexibility
NOT IMPL
Site-scope load/flex control
Response
{ "device_id": "uuid", "timestamp": "...", "connectors": [{ "connector_id": 1, "state": "charging", "power": 180, "soc": 42 }] }
GET
/v1/firmware/versions
IMPLEMENTED
Firmware adoption catalogue (operator-side, Acme extension; envelope shape: data.items + data.summary)
Response
{
"code": 0, "message": "success",
"data": {
"items": [{ "model": "TP-AC22", "manufacturer": "Tellus Power",
"latest_version": "260122.1606", "total_devices": 5, "on_latest": 5,
"adoption_percentage": 100, "versions": [{ "version": "260122.1606", "count": 5 }] }],
"total": 3, "page": 1, "size": 3,
"summary": { "total_devices": 15, "on_latest": 15, "adoption_percentage": 100 }
}
}
GET
/v1/configuration/profiles
NOT IMPL
Device configuration profiles
GET
/v1/models
NOT IMPL
Charger model catalogue
Intelligence (501 — Not Available)
GET
/v1/intelligence/health-scores
NOT IMPL
Device health scores
GET
/v1/intelligence/anomalies
NOT IMPL
Anomaly detection
GET
/v1/intelligence/forecasts/energy
NOT IMPL
Energy forecasts
GET
/v1/intelligence/forecasts/utilization
NOT IMPL
Utilization forecasts
GET
/v1/intelligence/daily-briefing
NOT IMPL
Daily briefing
GET
/v1/intelligence/agents
NOT IMPL
AI agent list
POST
/v1/intelligence/ask
NOT IMPL
AI co-pilot query
Other
Legacy and internal endpoints
Legacy Operator-to-Operator (OpenAPI only)
PUT
/customer/query_station_info
NOT IMPL
Query charger list
PUT
/customer/notification_stationStatus
NOT IMPL
Notify status change
PUT
/cp/query_station_status
NOT IMPL
Batch status query
POST
/cp/start_charging
NOT IMPL
Start charging (legacy)
POST
/cp/stop_charging
NOT IMPL
Stop charging (legacy)
POST
/cp/start_discharging
NOT IMPL
Start V2G (legacy)
POST
/cp/stop_discharging
NOT IMPL
Stop V2G (legacy)
POST
/customer/notify_work_status
NOT IMPL
Push work status
Internal / Debug (Acme-only)
GET
/v1/internal/activity
IMPLEMENTED
Live traffic feed (JSON)
GET
/v1/debug/requests
IMPLEMENTED
Request log ring buffer (200 entries)
POST
/admin/queue-command
NOT IMPL
Manual command injection