Migration from v1
This guide walks through migrating from the legacy Accio GPS API to the Amazon Automotive Telematics API. The new API provides a richer telemetry model, batch submission support, and improved authentication via SigV4a.
What's changing
| Aspect | v1 (legacy) | v2 (current) |
|---|---|---|
| Endpoint | prod-na.accio.ats.amazon.dev/accioGPS | na.telematics.transportation.amazon.dev/v2/telemetry |
| Batch support | Single record only | Single + Batch (/v2/telemetry/batch) |
| Auth signing | SigV4 | SigV4a |
| API key | Required (x-api-key header) | Not required — remove it |
| Provider field | In request body | Injected from caller's AWS account |
| GPS coordinates | Strings | Doubles |
| Telemetry fields | Strings | Typed (Double, Integer, Boolean) |
Endpoint changes
| Region | v1 endpoint | v2 single | v2 batch |
|---|---|---|---|
| NA (prod) | prod-na.accio.ats.amazon.dev/accioGPS | na.telematics.transportation.amazon.dev/v2/telemetry | na.telematics.transportation.amazon.dev/v2/telemetry/batch |
| EU (prod) | prod-eu.accio.ats.amazon.dev/accioGPS | eu.telematics.transportation.amazon.dev/v2/telemetry | eu.telematics.transportation.amazon.dev/v2/telemetry/batch |
| JP (prod) | prod-jp.accio.ats.amazon.dev/accioGPS | jp.telematics.transportation.amazon.dev/v2/telemetry | jp.telematics.transportation.amazon.dev/v2/telemetry/batch |
| NA (gamma) | gamma-na.accio.ats.amazon.dev/accioGPS | gamma-na.telematics.transportation.amazon.dev/v2/telemetry | gamma-na.telematics.transportation.amazon.dev/v2/telemetry/batch |
| EU (gamma) | gamma-eu.accio.ats.amazon.dev/accioGPS | gamma-eu.telematics.transportation.amazon.dev/v2/telemetry | gamma-eu.telematics.transportation.amazon.dev/v2/telemetry/batch |
| JP (gamma) | gamma-jp.accio.ats.amazon.dev/accioGPS | gamma-jp.telematics.transportation.amazon.dev/v2/telemetry | gamma-jp.telematics.transportation.amazon.dev/v2/telemetry/batch |
If you are currently using a direct API Gateway URL (e.g. https://1hzxpvs4r6.execute-api.us-east-1.amazonaws.com/Prod/accioGPS), migrate to the regional endpoints above.
Authentication changes
Old: SigV4 + x-api-key header (value provided during onboarding).
New: SigV4a only. The x-api-key header is no longer needed — remove it. Access is controlled via the gateway access policy registered during onboarding.
Update your signing logic from SigV4 to SigV4a. If you use an AWS SDK, ensure you are using a version that supports SigV4a. See the Authentication guide for a working Java code sample.
Payload changes
v1 request body
{
"assetId": "TRUCK-001",
"assetType": "BOX_TRUCK",
"assetOwnerId": "AZNG",
"carrierId": "AZNG",
"timestamp": 1694466000000,
"provider": "MY_PROVIDER",
"position": {
"latitude": "12.8625706",
"longitude": "80.0736267"
},
"deviceTelemetryData": {
"inMotion": true,
"altitude": "123",
"accelerometerX": "0.5",
"accelerometerY": "0.3",
"accelerometerZ": "1.0",
"heading": "180",
"gpsSatelliteCount": "16",
"hdop": "0.6"
}
}
v2 request body (single)
{
"payloadId": "550e8400-e29b-41d4-a716-446655440000",
"carrier": "AZNG",
"signalTimestamp": 1694466000000,
"assetIdentifier": { "id": "TRUCK-001", "type": "BOX_TRUCK", "operator": "AZNG" },
"gps": {
"latitude": 12.8625706,
"longitude": 80.0736267,
"inMotion": true,
"altitude": 123.0,
"altitudeUnits": "METERS",
"accelerometerX": 0.5,
"accelerometerY": 0.3,
"accelerometerZ": 1.0,
"accelerometerUnits": "METERS_PER_SECOND_SQUARED",
"heading": 180.0,
"satelliteCount": 16,
"hdop": 0.6
}
}
v2 request body (batch)
{
"batchId": "batch-20240901-001",
"timestamp": 1694466000000,
"data": [
{
"payloadId": "550e8400-e29b-41d4-a716-446655440001",
"carrier": "AZNG",
"signalTimestamp": 1694466000000,
"assetIdentifier": { "id": "TRUCK-001", "type": "BOX_TRUCK", "operator": "AZNG" },
"gps": {
"latitude": 12.8625706,
"longitude": 80.0736267,
"inMotion": true,
"altitude": 123.0,
"altitudeUnits": "METERS",
"heading": 180.0,
"satelliteCount": 16,
"hdop": 0.6
}
},
{
"payloadId": "550e8400-e29b-41d4-a716-446655440002",
"carrier": "AZNG",
"signalTimestamp": 1694466060000,
"assetIdentifier": { "id": "TRUCK-002", "type": "TRAILER", "operator": "AZNG" },
"gps": { "latitude": 13.0, "longitude": 80.25, "inMotion": false }
}
]
}
Field mapping reference
Top-level fields
At least one of assetIdentifier or deviceIdentifier must be provided. At least one of gps or signals must be provided.
| v1 field | v2 field | Notes | |
|---|---|---|---|
assetId | assetIdentifier.id | required* | Moved into assetIdentifier object. Required if providing assetIdentifier (see constraint below). |
assetType | assetIdentifier.type | required* | Moved into assetIdentifier object. Required if providing assetIdentifier. See Asset Types for valid values. |
assetOwnerId | assetIdentifier.operator | required* | Renamed and moved into assetIdentifier. Must be a SCAC code. Required if providing assetIdentifier. |
carrierId | carrier | required | Renamed. Must be a SCAC code. |
timestamp | signalTimestamp | required | Renamed. Epoch milliseconds (unchanged). |
provider | removed | Provider is determined from the caller's AWS account. Remove this field. | |
position + deviceTelemetryData | gps | optional* | Both old objects are merged into a single gps object. At least one of gps or signals must be provided. |
| new | payloadId | required | Client-generated UUID payload identifier. |
| new | edgeTimestamp | optional | Timestamp at edge/gateway (epoch ms). |
| new | vendorTimestamp | optional | Vendor-reported timestamp (epoch ms). |
assetIdentifier constraint: id, type, and operator must all be provided together or all omitted. If omitting the full assetIdentifier, provide a deviceIdentifier instead (new in v2 — used when identifying the asset via the telematics device rather than the asset itself).
GPS / position fields
See GPS for the full field reference.
| v1 field | v2 field | Notes | |
|---|---|---|---|
position.latitude | gps.latitude | required | String → Double. Range: -90.0 to 90.0. |
position.longitude | gps.longitude | required | String → Double. Range: -180.0 to 180.0. |
deviceTelemetryData.inMotion | gps.inMotion | optional | Boolean (unchanged). |
deviceTelemetryData.altitude | gps.altitude | optional | String → Double. Requires altitudeUnits — see DistanceUnit. |
deviceTelemetryData.accelerometerX | gps.accelerometerX | optional | String → Double. Requires accelerometerUnits — see AccelerationUnit. |
deviceTelemetryData.accelerometerY | gps.accelerometerY | optional | String → Double. Requires accelerometerUnits — see AccelerationUnit. |
deviceTelemetryData.accelerometerZ | gps.accelerometerZ | optional | String → Double. Requires accelerometerUnits — see AccelerationUnit. |
deviceTelemetryData.heading | gps.heading | optional | String → Double. Direction of travel in degrees (0–360). |
deviceTelemetryData.gpsSatelliteCount | gps.satelliteCount | optional | String → Integer. |
deviceTelemetryData.hdop | gps.hdop | optional | String → Double. Lower is more accurate. |
| new | gps.speed | optional | Current speed. Requires speedUnits — see VelocityUnit. |
| new | gps.horizontalAccuracy | optional | GPS horizontal position accuracy. Requires horizontalAccuracyUnits — see DistanceUnit. |
| new | gps.eventType | optional | Event that triggered the GPS ping. Common values: PERIODIC, ENGINE_START, ENGINE_STOP, IGNITION_ON, IGNITION_OFF. |
Units fields
If you submit a field that has a corresponding units field, you must also provide the units value. See Unit Types for the full list of accepted values per enum.
| Value field | Units field (required with it) | Unit type |
|---|---|---|
gps.speed | gps.speedUnits | VelocityUnit |
gps.altitude | gps.altitudeUnits | DistanceUnit |
gps.horizontalAccuracy | gps.horizontalAccuracyUnits | DistanceUnit |
gps.accelerometerX | gps.accelerometerUnits | AccelerationUnit |
Response changes
The single endpoint returns 202 Accepted with a requestId. The batch endpoint returns 202 Accepted when all payloads succeed, or 207 Multi-Status when one or more fail — always check the failed list on a 207.
{
"requestId": "abc-123-def",
"accepted": ["payloadId-1"],
"failed": [
{
"payloadId": "payloadId-2",
"errorType": "Validation",
"errorMessage": "Payload contains invalid data",
"validationErrorDetails": [
{ "field": "gps.latitude", "message": "Field must be not less than -90.0" }
]
}
],
"summary": { "total": 2, "accepted": 1, "failed": 1 }
}
FAQ
- How do I test before switching production traffic?
- Use the Gamma endpoints to validate your integration first. See Getting Started for the full endpoint list.
- What happens if I send String values for latitude/longitude?
- The new API expects Doubles. Sending Strings will result in a
400 ValidationException. - Is the batch endpoint required?
- No. The single endpoint works exactly as before — one record per request. Batch is optional and recommended for high-volume clients.
- Do I need to keep the
x-api-keyheader? - No — remove it entirely. Authentication is handled via SigV4a request signing. Any identity within your registered AWS account is authorized.