Skip to main content
POST
Record an asset's current location
Records where an asset is — position, and optionally the odometer. Use this when an external system knows an asset’s location: a third-party ELD, or a vehicle reporting its own position. To send speed, fuel, or temperature readings taken at the same moment, use Record asset telemetry instead. This endpoint is position-only by design.
This endpoint requires the visibility:create scope. See Authentication.
assetId is the Alvys id of a driver, truck, or trailer — the Id returned by the drivers, trucks, and trailers endpoints. It is not a unit number.

Ordering and duplicate readings

Positions are ordered per asset by RecordedAt. A reading older than, or equal to, the one already held for this source is discarded and answered 409 Conflict.
A 409 is a normal out-of-order outcome, not a failure. Do not retry it — resending the same reading will keep answering 409. Send the next reading instead.
This also makes retries safe: resending a reading you already delivered does not move the asset or fire a duplicate tracking update.

Endpoint

Request Parameters

Request Body

Pass TripId when you know it. On an asset running more than one active trip — a team, drop-and-hook, or multi-stop asset — Alvys otherwise picks the trip with the nearest stop, and the tracking update, ETA, and customer tracking page follow that choice.
The request body is limited to 8 KB. Send one reading per request.

Example Request Body

Example CURL request

Response Fields

Example Response

201 Created

Status Codes

A 409 carries the error type https://api.alvys.com/errors/Conflict/StaleLocation and reports the RecordedAt of the position currently held, so you can tell how far behind your feed is.

Rate Limits

All endpoints are subject to rate limits to protect the API from traffic spikes. See Rate Limits.

Authorizations

Authorization
string
header
required

OAuth 2.0 client-credentials access token. Obtain one from https://auth.alvys.com/oauth/token (grant_type=client_credentials, audience=https://api.alvys.com/public/), then paste it here. The playground sends it as Authorization: Bearer <token>.

Path Parameters

assetId
string
required
version
string
default:1.0
required

API version (e.g., 1.0)

Example:

"1.0"

Body

Coordinates
object | null
RecordedAt
string<date-time> | null
Address
object | null
TripId
string | null
Odometer
number<double> | null
OdometerReadingAt
string<date-time> | null

Response

Created

AssetId
string
required
AssetType
string
required
Source
string
required
Coordinates
object
required
RecordedAt
string<date-time>
required
ReceivedAt
string<date-time>
required
Address
object | null
FormattedAddress
string | null
TripId
string | null
TripNumber
string | null
Odometer
number<double> | null
OdometerReadingAt
string<date-time> | null