API Reference
A single REST endpoint returns the live location of every vehicle in your fleet. Built to the BRTA GPS Monitoring Platform specification, callable from any language or straight from a browser.
{
"success": true,
"message": "Vehicle locations fetched successfully.",
"vehicle_count": 3,
"data": [
{
"vehicle_id": "VEH001",
"vehicle_name": "Bus-01",
"registration_number": "Dhaka Metro-GA-12-3456",
"vehicle_type": "Bus",
"ignition_status": "ON",
"speed": 45,
"heading": 180,
"timestamp": "2026-07-07T10:35:21.000Z",
"location": {
"latitude": 23.810331,
"longitude": 90.412521
}
},
{
"vehicle_id": "VEH002",
"vehicle_name": "Bus-02",
"registration_number": "Dhaka Metro-GA-12-3470",
"vehicle_type": "Bus",
"ignition_status": "OFF",
"speed": 0,
"heading": 0,
"timestamp": "2026-07-07T10:35:15.000Z",
"location": {
"latitude": 23.801120,
"longitude": 90.405600
}
}
]
}Introduction
What the API does and who it is for.
The MobiTrack24 API exposes the latest GPS position of the vehicles an organization manages. It exists so regulators, corporate fleet owners, and partner systems can read live location data without touching the tracking dashboard.
Everything is a plain HTTPS GET returning JSON. There is no SDK to install and no session to maintain — one request returns the current state of the entire fleet.
Vehicles added to your account later appear automatically. The fleet is resolved at request time, so no change to the endpoint, your API key, or your integration is ever required.
Quickstart
From nothing to live coordinates in three steps.
- 1Get a key
Sign in to the API dashboard and generate one. It is shown once — store it somewhere your server can read it.
- 2Call the endpoint
Send your organization name, registered email, and key as query parameters. Nothing else is required — no headers, no session, no SDK.
- 3Read the fleet
The response carries
vehicle_countand adataarray of positions. Poll it on an interval to keep a live view.
curl -G "https://api.mobitrack24.com/v1/vehicles/current-location" \
--data-urlencode "organization_name=ABC GPS Ltd" \
--data-urlencode "email=integration@abc.com" \
--data-urlencode "api_key=$API_KEY"Prefer to try it without leaving the page? The playground runs the same call against the live API.
Authentication
Every request is identified by three query parameters.
Authentication uses an API key issued to your organization, passed as a query parameter alongside the organization name and registered email that BRTA holds on record. All three must match for a request to succeed.
| Parameter | Description |
|---|---|
| organization_name | Official organization name registered with BTRC. |
| Registered email address of the organization. | |
| api_key | The secret key issued for your integration. |
Keep your key secret. It grants read access to every vehicle in your fleet. Call the API from your server where you can, and rotate the key from the dashboard if it is ever exposed.
Generate or rotate a key on the API dashboard. An optional Authorization: Bearer token can be required in addition, if agreed during integration.
Conventions
Units, formats, and transport rules that apply to every response.
Fleet locations
Returns the latest position of every vehicle your organization manages.
https://api.mobitrack24.com/v1/vehicles/current-locationQuery parameters
| Parameter | Type | Description | |
|---|---|---|---|
| organization_name | String | Required | Registered organization name. |
| String | Required | Registered email address. | |
| api_key | String | Required | Your issued API key. |
| vehicle_id | String | Optional | Omit to receive the whole fleet. See Single vehicle below. |
Returns
A data array holding one object per vehicle, and vehicle_count with the number of entries returned. A vehicle that has never reported a position has no location to send, so it is omitted from both.
curl -G "https://api.mobitrack24.com/v1/vehicles/current-location" \
--data-urlencode "organization_name=ABC GPS Ltd" \
--data-urlencode "email=integration@abc.com" \
--data-urlencode "api_key=YOUR_API_KEY" \
-H "Accept: application/json"{
"success": true,
"message": "Vehicle locations fetched successfully.",
"vehicle_count": 3,
"data": [
{
"vehicle_id": "VEH001",
"vehicle_name": "Bus-01",
"registration_number": "Dhaka Metro-GA-12-3456",
"vehicle_type": "Bus",
"ignition_status": "ON",
"speed": 45,
"heading": 180,
"timestamp": "2026-07-07T10:35:21.000Z",
"location": {
"latitude": 23.810331,
"longitude": 90.412521
}
},
{
"vehicle_id": "VEH002",
"vehicle_name": "Bus-02",
"registration_number": "Dhaka Metro-GA-12-3470",
"vehicle_type": "Bus",
"ignition_status": "OFF",
"speed": 0,
"heading": 0,
"timestamp": "2026-07-07T10:35:15.000Z",
"location": {
"latitude": 23.801120,
"longitude": 90.405600
}
}
]
}Single vehicle
The same endpoint narrowed to one vehicle, kept for existing v1 integrations.
https://api.mobitrack24.com/v1/vehicles/current-location?vehicle_id=VEH001Adding vehicle_id returns that one vehicle. The response body is the original v1 shape: a single data object rather than an array, and without vehicle_count, vehicle_name, or registration_number.
New integrations should prefer the fleet call above. This form exists so integrations written against v1 keep working unchanged.
An unknown vehicle, or one your key is not scoped to, returns 404 Vehicle not found.
curl -G "https://api.mobitrack24.com/v1/vehicles/current-location" \
--data-urlencode "organization_name=ABC GPS Ltd" \
--data-urlencode "email=integration@abc.com" \
--data-urlencode "api_key=YOUR_API_KEY" \
--data-urlencode "vehicle_id=VEH001" \
-H "Accept: application/json"{
"success": true,
"message": "Current vehicle location fetched successfully.",
"data": {
"vehicle_id": "VEH001",
"vehicle_type": "Bus",
"ignition_status": "ON",
"speed": 45,
"heading": 180,
"timestamp": "2026-07-07T10:35:21.000Z",
"location": {
"latitude": 23.810331,
"longitude": 90.412521
}
}
}Response fields
Every field returned by the fleet endpoint.
| Field | Type | Description |
|---|---|---|
| success | Boolean | Whether the request succeeded. |
| message | String | Human-readable result message. |
| vehicle_count | Number | Total number of vehicles returned. |
| data[].vehicle_id | String | Unique vehicle identifier. |
| data[].vehicle_name | String | Name assigned to the vehicle by the provider. |
| data[].registration_number | String | Vehicle registration number, or UNAVAILABLE. |
| data[].vehicle_type | String | Type of vehicle (e.g. Bus, Truck, Car). |
| data[].ignition_status | String | ON, OFF, or UNAVAILABLE. |
| data[].speed | Number | Current speed in km/h. |
| data[].heading | Number | Direction of travel in degrees. |
| data[].timestamp | String | GPS update time, UTC ISO 8601. |
| data[].location.latitude | Number | Latitude in WGS84. |
| data[].location.longitude | Number | Longitude in WGS84. |
Errors & status codes
Failures use the same JSON envelope as successes.
| Code | Meaning | Typical cause |
|---|---|---|
| 200 | Success | Request completed. |
| 400 | Bad Request | A required parameter is missing or empty. |
| 401 | Unauthorized | Key, organization name, or email does not match. |
| 404 | Vehicle Not Found | Unknown vehicle_id, or one outside your scope. |
| 500 | Internal Server Error | Upstream tracking platform unavailable. |
Error bodies always carry success: false and a message, so a client can branch on the body alone without inspecting the status line.
{
"success": false,
"message": "Vehicle not found."
}Freshness & polling
How current the data is, and how often to ask for it.
A vehicle parked out of coverage keeps returning its last known fix with an unchanged timestamp. Treat a fix older than a few minutes as stale in your own UI rather than as a live position.
A vehicle that has never reported a position has nothing to send, so it appears in neither data nor vehicle_count. A shorter array than you expect is normal for a fleet with newly fitted devices.
Vehicles added to your account later appear on the next call. The fleet is resolved when the request arrives, so no change to your key or integration is ever needed.
CORS & browser use
The API is callable directly from front-end code.
Cross-origin requests are permitted from any origin, and the headers are present on every response including errors — so a 401 reaches your code as a readable 401 rather than an opaque network failure.
| Header | Value |
|---|---|
| Access-Control-Allow-Origin | * |
| Access-Control-Allow-Methods | GET, OPTIONS |
| Access-Control-Allow-Headers | Accept, Authorization, Content-Type |
| Access-Control-Max-Age | 86400 |
Credentials are not used, so Access-Control-Allow-Credentials is deliberately not sent. Remember that a key shipped to a browser is visible to anyone using the page.
Postman collection
Import the whole API, with tests, in one click.
In Postman: Import → File, then pick the downloaded .json.
Open the collection's Variables tab and set api_key (plus organization and email if they are blank). Every request reads them from there.
Send Fleet locations, or use Run collection to execute every request with its tests in one pass.
Both endpoints plus an Error cases folder (400, 401, 404). The fleet request stores the first vehicle it sees, so the single-vehicle request is runnable immediately after.
The file carries no API key — Postman keeps yours in its own variable store, so the collection stays safe to share with your team.
Playground
Run a real request against the live API from this page.
Changelog
What changed, and what it means for an existing integration.
Omitting vehicle_id now returns the whole fleet, with vehicle_count, vehicle_name, and registration_number added per vehicle. organization_name is accepted alongside the original organization_id. CORS headers are sent on every response, errors included.
The original current-location call. Still served unchanged — a v1 integration needs no edits, and passing vehicle_id returns the exact v1 body it always did.
Published fields are never removed or renamed. New fields may be added, so parse defensively and ignore what you don't recognise.
Support
Getting help with an integration.
Issue or rotate keys on the API dashboard. When reporting a problem, include the UTC timestamp of the request, the HTTP status you received, and the message from the response body — never your API key.