-
Notifications
You must be signed in to change notification settings - Fork 0
API Reference
WhyLev edited this page Jun 12, 2026
·
1 revision
Reverse‑engineered from Bosch Smart Gardening Android app v4.1.2 (build 14246).
| Item | Value |
|---|---|
| Base URL | https://api.indego-cloud.iot.bosch-si.com |
| API Version Prefix | /api/v1 |
| Transport | HTTPS (TLS) with certificate pinning (**.indego-cloud.iot.bosch-si.com) |
| Auth Scheme | OAuth2 Bearer token (Bosch ID / OpenID Connect) |
| Auth Header | Authorization: Bearer <token> |
| Content-Type | application/json |
| HTTP Client Timeout | 180 seconds (required due to cellular mower wake‑up latency) |
| Placeholder | Meaning |
|---|---|
{alm} |
Mower serial number (ALM = Automated Lawn Mower) |
{userId} |
Account user ID |
{id} |
Alert ID, firmware notification ID, etc. |
{countryCode} |
ISO 3166-1 alpha‑2 country code |
{resource} |
Static resource name |
All endpoints require a valid Bearer token except those under /api/v1/pub/.
The integration uses an automatic token refresh mechanism (OkHttp Authenticator) that renews the token when a 401 Unauthorized response is received.
Primary login endpoint:
POST /api/v1/authenticate?boschid
→ Body: DeviceDetails (app version, OS, device info)
→ Response: { "alm_sn": "...", "contextId": "...", "userId": "..." }
| Method | Path | Description |
|---|---|---|
GET |
/api/v1/alms/{alm}/state |
Real‑time status (battery, state, position, runtime). Supports long‑polling via ?longpoll=true&timeout=...
|
PUT |
/api/v1/alms/{alm}/state |
Send command: { "state": "mow"|"pause"|"returnToDock" }
|
GET |
/api/v1/alms/{alm}/operatingData |
Detailed battery, garden, and runtime statistics |
| Method | Path | Description |
|---|---|---|
GET |
/api/v1/alms/{alm}/map |
Fetch SVG map with optional mower overlay (?showMower=true) |
POST |
/api/v1/alms/{alm}/map |
Trigger a map scan / upload new map |
DELETE |
/api/v1/alms/{alm}/map |
Delete stored garden map |
| Method | Path | Description |
|---|---|---|
GET |
/api/v1/alerts |
List alerts (query ?limit=N) |
PUT |
/api/v1/alerts/{id} |
Mark single alert as read |
DELETE |
/api/v1/alerts/{id} |
Delete single alert |
PUT |
/api/v1/alerts |
Mark all alerts as read |
DELETE |
/api/v1/alerts |
Delete all alerts (body { "ids": [...] } for specific) |
| Method | Path | Description |
|---|---|---|
GET |
/api/v1/alms/{alm}/predictive |
Get SmartMowing enabled status |
PUT |
/api/v1/alms/{alm}/predictive |
Enable/disable ({ "enabled": true/false }) |
GET |
/api/v1/alms/{alm}/predictive/setup |
Get configuration (avoid rain/temperature, grass growth, etc.) |
PUT |
/api/v1/alms/{alm}/predictive/setup |
Update configuration |
GET |
/api/v1/alms/{alm}/predictive/location |
Get garden GPS coordinates (for weather) |
PUT |
/api/v1/alms/{alm}/predictive/location |
Set garden location |
GET |
/api/v1/alms/{alm}/predictive/weather |
Live weather forecast |
GET |
/api/v1/alms/{alm}/predictive/nextcutting |
Predicted next mow time |
GET |
/api/v1/alms/{alm}/predictive/lastcutting |
Last completed mow timestamp |
GET |
/api/v1/alms/{alm}/predictive/schedule |
Computed smart schedule |
PUT |
/api/v1/alms/{alm}/predictive/reset |
Reset learning data (query ?frequency=N) |
| Method | Path | Description |
|---|---|---|
GET |
/api/v1/alms/{alm}/calendar |
Get mowing calendar |
PUT |
/api/v1/alms/{alm}/calendar |
Update calendar |
| Method | Path | Description |
|---|---|---|
GET |
/api/v1/alms/{alm}/security |
Get security settings (autolock, PIN enabled) |
PUT |
/api/v1/alms/{alm}/security |
Update PIN / autolock |
| Method | Path | Description |
|---|---|---|
GET |
/api/v1/alms/{alm}/config |
Read config (bump sensitivity, border cut, mowing mode, etc.) |
PUT |
/api/v1/alms/{alm}/config |
Update config |
PUT |
/api/v1/alms/{alm}/dateAndTime |
Set mower clock |
PUT |
/api/v1/alms/{alm}/borderCut |
Trigger border cut |
GET |
/api/v1/alms/{alm}/automaticUpdate |
Get auto‑update preference |
PUT |
/api/v1/alms/{alm}/automaticUpdate |
Set auto‑update preference |
GET |
/api/v1/alms/{alm}/updates |
Check for firmware updates |
PUT |
/api/v1/alms/{alm}/updates |
Start firmware update |
| Method | Path | Description |
|---|---|---|
GET |
/api/v1/users/{userId} |
Get user profile |
PUT |
/api/v1/users/{userId} |
Modify user profile |
POST |
/api/v1/users |
Create user account |
POST |
/api/v1/alms/{alm}/pair |
Pair mower to account |
DELETE |
/api/v1/alms/{alm}/pair |
Unpair mower |
GET |
/api/v1/alms |
List all mowers for user |
| Method | Path | Description |
|---|---|---|
GET |
/api/v1/pub/support/{countryCode} |
Customer support contact |
GET |
/api/v1/pub/video |
Tutorial video URL (query country_code, language, mowerType) |
GET |
/api/v1/pub/accessories |
List of accessories |
GET |
/api/v1/pub/static/{resource} |
Static assets (images, etc.) |
| Method | Path | Description |
|---|---|---|
GET |
/api/v1/alms/{alm}/eu-data |
GDPR data export |
GET |
/api/v1/alms/{alm}/eu-data-3p |
Third‑party consent status |
POST |
/api/v1/alms/{alm}/eu-data-3p |
Grant consent |
DELETE |
/api/v1/alms/{alm}/eu-data-3p |
Revoke consent |
- Timeout Handling – Always use a read timeout of 180 seconds. Mowers on cellular networks may take up to 2 minutes to respond.
-
Long‑Polling – The
GET /stateendpoint supports?longpoll=true&timeout=30&last=<last_state>for efficient real‑time updates. -
Error Patterns – HTTP
500or202responses often contain mower‑specific error suffixes (e.g.,_12288). Refer to the Error & Mower State Codes page for composite error parsing.
This integration is an independent open‑source project and is not affiliated with or endorsed by Bosch.
| Maintainers | @whylev · @kimzeuner · @sander1988 |
|---|---|
| Source Code | GitHub Repository |
| Issue Tracker | Report a bug / Request a feature |
| Community Chat | Discord |
| License | MIT License |
💡 Tip: Found an error or missing detail? Open an issue on GitHub